Stylus 模块化与导入 #
导入基础 #
@import 指令 #
@import 用于导入其他 Stylus 文件:
stylus
// 导入文件
@import 'variables'
@import 'mixins'
@import 'base/reset'
@require 指令 #
@require 与 @import 类似,但只导入一次:
stylus
// 只导入一次,避免重复
@require 'variables'
@require 'variables' // 不会重复导入
// @import 会重复导入
@import 'variables'
@import 'variables' // 会重复导入
推荐使用 @require #
stylus
// 推荐:使用 @require 避免重复
@require 'variables'
@require 'mixins'
@require 'functions'
文件路径 #
相对路径 #
stylus
// 相对于当前文件
@import './variables'
@import '../mixins/common'
@import './components/buttons'
绝对路径 #
stylus
// 使用配置的路径
@import 'nib' // 从 node_modules 导入
配置导入路径 #
在编译时配置路径:
bash
# 命令行
stylus -I ./src/styles/imports main.styl
# Node.js API
stylus(str)
.include('./src/styles/imports')
.render(...)
部分文件 #
命名约定 #
以下划线开头的文件作为部分文件:
text
styles/
├── _variables.styl # 部分文件
├── _mixins.styl # 部分文件
├── _functions.styl # 部分文件
└── main.styl # 主文件
导入部分文件 #
stylus
// 导入时可以省略下划线和扩展名
@import 'variables'
@import 'mixins'
项目结构 #
推荐结构 #
text
styles/
├── abstracts/ # 抽象层(不直接输出样式)
│ ├── _variables.styl # 变量
│ ├── _mixins.styl # 混入
│ ├── _functions.styl # 函数
│ └── _index.styl # 统一导出
│
├── base/ # 基础样式
│ ├── _reset.styl # 重置
│ ├── _typography.styl # 排版
│ └── _base.styl # 基础元素
│
├── components/ # 组件
│ ├── _buttons.styl
│ ├── _cards.styl
│ ├── _forms.styl
│ └── _index.styl
│
├── layout/ # 布局
│ ├── _header.styl
│ ├── _footer.styl
│ ├── _sidebar.styl
│ └── _grid.styl
│
├── pages/ # 页面特定样式
│ ├── _home.styl
│ └── _about.styl
│
├── themes/ # 主题
│ ├── _light.styl
│ └── _dark.styl
│
└── main.styl # 主入口文件
主入口文件 #
stylus
// main.styl
// 抽象层(变量、混入、函数)
@require 'abstracts'
// 基础样式
@require 'base/reset'
@require 'base/typography'
@require 'base/base'
// 布局
@require 'layout/grid'
@require 'layout/header'
@require 'layout/footer'
@require 'layout/sidebar'
// 组件
@require 'components'
// 页面
@require 'pages/home'
@require 'pages/about'
// 主题
@require 'themes/light'
索引文件 #
stylus
// abstracts/_index.styl
@require 'variables'
@require 'mixins'
@require 'functions'
// components/_index.styl
@require 'buttons'
@require 'cards'
@require 'forms'
CSS 导入 #
导入 CSS 文件 #
stylus
// 导入 CSS 文件(保留 @import 语句)
@import 'normalize.css'
// 编译后保留
// @import 'normalize.css';
内联 CSS #
stylus
// 使用 @css 块内联 CSS
@css {
.legacy-element {
*zoom: 1;
}
}
条件导入 #
基于变量导入 #
stylus
// 条件导入
theme = 'dark'
if theme == 'dark'
@require 'themes/dark'
else
@require 'themes/light'
基于功能导入 #
stylus
// 功能开关
features = {
animations: true,
icons: true,
charts: false
}
if features.animations
@require 'components/animations'
if features.icons
@require 'components/icons'
if features.charts
@require 'components/charts'
导入作用域 #
变量作用域 #
stylus
// _variables.styl
primary-color = #3498db
// main.styl
@require 'variables'
.button
background-color primary-color // 可访问
混入作用域 #
stylus
// _mixins.styl
border-radius(radius)
border-radius radius
// main.styl
@require 'mixins'
.button
border-radius(5px) // 可访问
实用示例 #
1. 组件库结构 #
text
components/
├── _variables.styl
├── _mixins.styl
├── _functions.styl
│
├── button/
│ ├── _button.styl
│ ├── _button-group.styl
│ └── _index.styl
│
├── form/
│ ├── _input.styl
│ ├── _select.styl
│ ├── _checkbox.styl
│ └── _index.styl
│
├── card/
│ ├── _card.styl
│ └── _index.styl
│
└── index.styl # 组件库入口
stylus
// components/index.styl
@require 'variables'
@require 'mixins'
@require 'functions'
@require 'button'
@require 'form'
@require 'card'
2. 主题系统 #
text
themes/
├── _variables-light.styl
├── _variables-dark.styl
├── _common.styl
└── index.styl
stylus
// themes/index.styl
theme = 'light' // 可配置
// 导入对应主题变量
if theme == 'light'
@require 'variables-light'
else if theme == 'dark'
@require 'variables-dark'
// 导入通用主题样式
@require 'common'
3. 响应式断点 #
stylus
// _breakpoints.styl
breakpoints = {
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl: 1400px
}
// 响应式混入
media-up(breakpoint)
@media (min-width: breakpoint)
{block}
media-down(breakpoint)
@media (max-width: breakpoint - 1)
{block}
media-between(min, max)
@media (min-width: min) and (max-width: max - 1)
{block}
4. 工具库 #
stylus
// _utilities.styl
// 间距
generate-spacing()
for i in 0..6
.m-{i}
margin i * 4px
.p-{i}
padding i * 4px
// 文字
.text-center
text-align center
.text-left
text-align left
.text-right
text-align right
// 显示
.d-none
display none
.d-block
display block
.d-flex
display flex
// Flex 工具
.justify-center
justify-content center
.items-center
align-items center
性能优化 #
1. 使用 @require #
stylus
// 推荐:避免重复导入
@require 'variables'
@require 'mixins'
// 不推荐:可能重复
@import 'variables'
@import 'variables'
2. 合理分割文件 #
stylus
// 推荐:按功能分割
@require 'variables'
@require 'mixins/buttons'
@require 'mixins/forms'
// 不推荐:单个大文件
@require 'everything' // 包含所有内容
3. 延迟导入 #
stylus
// 只在需要时导入
if $include-icons
@require 'icons'
if $include-charts
@require 'charts'
最佳实践 #
1. 清晰的导入顺序 #
stylus
// 1. 变量和配置
@require 'variables'
@require 'config'
// 2. 混入和函数
@require 'mixins'
@require 'functions'
// 3. 基础样式
@require 'reset'
@require 'typography'
// 4. 布局
@require 'layout/*'
// 5. 组件
@require 'components/*'
// 6. 页面
@require 'pages/*'
// 7. 工具类
@require 'utilities'
2. 使用索引文件 #
stylus
// 推荐:使用索引文件统一导出
@require 'abstracts'
@require 'components'
// 不推荐:逐个导入
@require 'abstracts/variables'
@require 'abstracts/mixins'
@require 'abstracts/functions'
3. 避免循环依赖 #
stylus
// 不推荐:循环依赖
// a.styl
@require 'b'
// b.styl
@require 'a' // 循环!
// 推荐:将共享内容提取到单独文件
// _shared.styl
shared-var = #333
// a.styl
@require 'shared'
// b.styl
@require 'shared'
下一步 #
掌握模块化与导入后,继续学习 内置函数 了解 Stylus 提供的丰富内置函数!
最后更新:2026-03-28