Stylus 基础语法 #

语法风格 #

Stylus 最显著的特点是语法的灵活性。你可以选择最适合自己的语法风格。

缩进语法(推荐) #

最简洁的写法,省略花括号、冒号和分号:

stylus
.container
  width 100%
  padding 20px
  background-color #fff
  
  .item
    color #333
    font-size 14px

编译结果:

css
.container {
  width: 100%;
  padding: 20px;
  background-color: #fff;
}
.container .item {
  color: #333;
  font-size: 14px;
}

CSS 风格 #

保持传统 CSS 语法:

stylus
.container {
  width: 100%;
  padding: 20px;
}

混合风格 #

自由组合两种风格:

stylus
.container {
  width 100px
  padding: 20px;
}

缩进规则 #

基本原则 #

text
父选择器
  属性名 属性值
  
或

父选择器
  子选择器
    属性名 属性值

缩进示例 #

stylus
// 正确示例
.header
  padding 20px
  
  .nav
    margin 0
    
    li
      display inline-block

// 错误示例:缩进不一致
.header
 padding 20px   // 缩进太少
    .nav        // 缩进太多
   margin 0     // 缩进混乱

缩进量 #

推荐使用 2 个空格:

stylus
.element
  property value
  nested-element
    property value

也可以使用 Tab:

stylus
.element
	property value

选择器 #

基本选择器 #

stylus
// 元素选择器
body
  margin 0
  padding 0

// 类选择器
.container
  max-width 1200px

// ID 选择器
#header
  position fixed

// 属性选择器
[type="text"]
  border 1px solid #ccc

// 通配符选择器
*
  box-sizing border-box

嵌套选择器 #

stylus
.nav
  ul
    list-style none
    margin 0
    padding 0
    
  li
    display inline-block
    
    a
      text-decoration none
      color #333

编译结果:

css
.nav ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.nav li {
  display: inline-block;
}
.nav li a {
  text-decoration: none;
  color: #333;
}

父选择器引用 (&) #

使用 & 引用父选择器:

stylus
.button
  display inline-block
  padding 10px 20px
  background-color #3498db
  color #fff
  
  &:hover
    background-color darken(#3498db, 10%)
    
  &:active
    background-color darken(#3498db, 20%)
    
  &.disabled
    opacity 0.5
    cursor not-allowed
    
  &--large
    padding 15px 30px
    font-size 18px

编译结果:

css
.button {
  display: inline-block;
  padding: 10px 20px;
  background-color: #3498db;
  color: #fff;
}
.button:hover {
  background-color: #2980b9;
}
.button:active {
  background-color: #1f6dad;
}
.button.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
.button--large {
  padding: 15px 30px;
  font-size: 18px;
}

父选择器高级用法 #

stylus
// 在选择器前添加内容
.header
  .container &
    padding 0 20px

// 编译结果:.container .header { padding: 0 20px; }

// 组合选择器
.form
  &__input
    border 1px solid #ccc
    
  &__button
    background-color #3498db
    
  &--inline
    display flex
    
    & ^[0]__input
      flex 1

// 编译结果:
// .form__input { border: 1px solid #ccc; }
// .form__button { background-color: #3498db; }
// .form--inline { display: flex; }
// .form--inline .form__input { flex: 1; }

选择器组合 #

stylus
// 逗号分隔
h1, h2, h3
  margin-top 0
  font-weight bold

// 多行写法
h1
, h2
, h3
  margin-top 0

// 嵌套中的组合
.article
  h1, h2, h3
    margin-bottom 20px

属性 #

基本写法 #

stylus
.element
  width 100px
  height 100px
  margin 10px
  padding 20px
  background-color #fff
  border 1px solid #ccc

属性值 #

stylus
.box
  // 数值
  width 100px
  height 50%
  
  // 颜色
  color #333
  background-color rgb(255, 0, 0)
  border-color rgba(0, 0, 0, 0.1)
  
  // 字符串
  font-family Helvetica, sans-serif
  content "Hello"
  
  // 计算
  width 100px + 50px
  margin 10px * 2

属性简写 #

stylus
// margin/padding 简写
.element
  margin 10px           // 四边相同
  margin 10px 20px      // 上下 左右
  margin 10px 20px 30px // 上 左右 下
  margin 10px 20px 30px 40px // 上 右 下 左

// font 简写
.text
  font 14px/1.5 Helvetica, sans-serif

// border 简写
.box
  border 1px solid #ccc

// background 简写
.hero
  background #000 url('bg.jpg') no-repeat center/cover

属性访问 #

使用 @ 访问已定义的属性值:

stylus
.element
  width 100px
  height @width  // 100px
  
  padding 10px
  margin @padding * 2  // 20px

注释 #

单行注释 #

使用 //,不会输出到 CSS:

stylus
// 这是单行注释,不会出现在 CSS 中
.element
  color #333  // 行尾注释也不会输出

多行注释 #

使用 /* */,会输出到 CSS:

stylus
/*
 * 这是多行注释
 * 会出现在编译后的 CSS 中
 */
.element
  color #333

编译结果:

css
/*
 * 这是多行注释
 * 会出现在编译后的 CSS 中
 */
.element {
  color: #333;
}

压缩模式下的注释 #

stylus
/*! 
 * 重要注释
 * 即使压缩也会保留
 */
.element
  color #333

空白与格式 #

空行 #

stylus
// 使用空行分隔逻辑块
.header
  position fixed
  top 0
  left 0
  width 100%
  
  // 导航样式
  .nav
    display flex
    
    .nav-item
      margin-right 20px

属性分组 #

stylus
.card
  // 布局
  display flex
  flex-direction column
  width 300px
  
  // 盒模型
  padding 20px
  margin 10px
  border-radius 8px
  
  // 视觉
  background-color #fff
  box-shadow 0 2px 10px rgba(0, 0, 0, 0.1)
  
  // 文字
  color #333
  font-size 14px

特殊语法 #

!important #

stylus
.element
  color #333 !important
  padding 10px !important

属性前缀 #

stylus
.element
  -webkit-transform rotate(45deg)
  -moz-transform rotate(45deg)
  -ms-transform rotate(45deg)
  transform rotate(45deg)

自定义属性 (CSS Variables) #

stylus
:root
  --primary-color #3498db
  --spacing 20px

.element
  color var(--primary-color)
  padding var(--spacing)

语法对比表 #

特性 CSS Stylus
花括号 必需 可选
冒号 必需 可选
分号 必需 可选
嵌套 不支持 支持
变量 支持 (–) 支持 (=)
注释 /* */ ///* */

最佳实践 #

1. 保持一致的缩进 #

stylus
// 推荐:统一使用 2 空格
.element
  property value
  nested
    property value

2. 合理使用空行 #

stylus
// 推荐:逻辑块之间使用空行
.header
  position fixed
  width 100%
  
  .logo
    float left
    
  .nav
    float right

3. 有意义的注释 #

stylus
// 推荐:解释为什么,而不是做什么
// 使用固定定位确保导航栏始终可见
.header
  position fixed

4. 避免过度嵌套 #

stylus
// 不推荐:嵌套太深
.page
  .content
    .article
      .body
        .paragraph
          color #333

// 推荐:扁平化结构
.article-paragraph
  color #333

下一步 #

掌握基础语法后,继续学习 变量 了解如何使用变量管理样式值!

最后更新:2026-03-28