Sass(Syntactically Awesome Style Sheets)是一种 CSS 预处理器,提供了比原生 CSS 更强大、更灵活的语法功能。它有两种语法格式:
- Sass(缩进语法,
.sass
文件) - SCSS(CSS-like 语法,
.scss
文件),推荐使用 SCSS,因其更接近标准 CSS。
一、Sass/SCSS 基础语法
1. 变量(Variables)
$primary-color: #3498db;body {background-color: $primary-color;
}
2. 嵌套(Nesting)
nav {ul {list-style: none;}li {display: inline-block;}a {text-decoration: none;color: $primary-color;}
}
编译为 CSS:
nav ul {list-style: none;
}
nav li {display: inline-block;
}
nav a {text-decoration: none;color: #3498db;
}
3. 父选择器 &
a {color: blue;&:hover {color: red;}
}
编译为 CSS:
a {color: blue;
}
a:hover {color: red;
}
4. 混合宏(Mixins)
用于定义可复用的样式块:
@mixin border-radius($radius) {-webkit-border-radius: $radius;-moz-border-radius: $radius;-ms-border-radius: $radius;border-radius: $radius;
}.box {@include border-radius(10px);
}
5. 函数(Functions)
可以自定义函数并返回值:
@function calculate-rem($size) {$rem-size: $size / 16px;@return #{$rem-size}rem;
}body {font-size: calculate-rem(14px);
}
6. 导入(Import)
将多个 Sass 文件合并为一个 CSS 文件:
// _variables.scss
$primary-color: #3498db;// main.scss
@import 'variables';body {background-color: $primary-color;
}
⚠️ 注意:Sass 的
@import
已被弃用,建议使用@use
和模块化方式(见下文)。
7. 模块化(@use
/ @forward
)
// _colors.scss
$primary: #3498db;
$secondary: #e74c3c;// main.scss
@use 'colors';body {background: colors.$primary;
}
8. 继承(Extend)
通过 @extend
继承其他选择器的样式:
.message {padding: 10px;border: 1px solid #ccc;
}.error {@extend .message;color: red;
}
9. 条件语句与循环
条件判断(if/else)
@mixin theme-color($theme) {@if $theme == dark {background-color: #333;color: #fff;} @else {background-color: #fff;color: #333;}
}.container {@include theme-color(dark);
}
循环(for / each)
@for $i from 1 through 5 {.col-#{$i} {width: 20% * $i;}
}// 或者
$list: red, blue, green;
@each $color in $list {.btn-#{$color} {background: $color;}
}
二、Sass 编译方式
你可以使用以下工具将 .scss
文件编译为 .css
文件:
- Dart Sass(官方推荐)
- Node.js +
sass-loader
(配合 Webpack) - VSCode 插件如 Live Sass Compiler
安装 Dart Sass:
npm install sass --save-dev
编译命令:
npx sass src/styles.scss dist/styles.css
三、使用建议
技巧 | 说明 |
---|---|
使用 _filename.scss | 下划线开头表示 partial 文件,不会单独编译 |
模块化组织结构 | 如 base/ , components/ , layout/ , themes/ 等目录 |
使用占位符 % | 避免无用类输出,只用于 @extend |
变量命名规范 | $spacing-sm , $font-title 等 |
使用 !default 设置默认值 | $color: red !default; |