原生 CSS 缺少变量、函数等编程能力,大型项目维护困难。Sass(SCSS)作为 CSS 预处理器,给 CSS 加上了这些能力。

一、安装与编译

npm install -g sass
sass input.scss output.css     # 编译
sass --watch input.scss:output.css   # 监听自动编译

二、变量

$primary: #3498db;
$radius: 8px;

.button {
  background: $primary;
  border-radius: $radius;
}

三、嵌套

.nav {
  padding: 16px;
  ul { margin: 0; }
  li {
    display: inline;
    a { color: #333; }
  }
}
嵌套让 CSS 结构与 HTML 层级一致,可读性好。但别嵌套太深(建议不超过 3 层),否则生成的选择器过长、优先级混乱。

四、父选择器 &

.button {
  color: blue;
  &:hover { color: darkblue; }     /* .button:hover */
  &--large { padding: 20px; }       /* .button--large */
}

五、混入(Mixin)

@mixin flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}

.modal {
  @include flex-center;
}

六、继承

.button {
  padding: 8px 16px;
  border: none;
}
.primary-button {
  @extend .button;        /* 继承所有样式 */
  background: blue;
}

七、模块化

// _variables.scss
$colors: (...);

// main.scss
@use 'variables';       // 引入
body { color: variables.$colors; }

八、Partials 与组织

用下划线开头的文件(_xxx.scss)表示部分文件,不会被单独编译,供其他文件 @use 引入。便于把样式拆分组织。

九、小结

Sass 让 CSS 有了工程化能力。虽然现代 CSS 也在吸收变量等特性(CSS Custom Properties),但 Sass 的混入、继承、循环仍是强大补充。