Sass 简介 #
什么是 CSS 预处理器? #
CSS 预处理器是一种脚本语言,它扩展了 CSS 的功能,通过特殊的编译器将预处理代码转换为标准的 CSS 代码。预处理器为 CSS 添加了编程语言的特性,如变量、函数、条件语句等。
text
┌─────────────────┐
│ 预处理代码 │
│ (.scss/.sass) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 编译器 │
│ (Dart Sass) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 标准 CSS │
│ (.css) │
└─────────────────┘
什么是 Sass? #
Sass(Syntactically Awesome Style Sheets,语法上很棒的样式表)是最成熟、稳定、强大的 CSS 预处理器。它由 Hampton Catlin 设计,由 Natalie Weizenbaum 开发,于 2006 年首次发布。
Sass 的历史 #
text
2006年 ─── Sass 诞生(Ruby Sass)
│
│ Hampton Catlin 设计
│ Natalie Weizenbaum 开发
│
2007年 ─── 引入 .scss 语法
│
│ 更接近 CSS 语法
│ 更易于学习
│
2010年 ─── Compass 框架发布
│
│ 提供丰富的 Mixin 库
│
2016年 ─── LibSass 发布
│
│ C/C++ 实现
│ 编译速度更快
│
2019年 ─── Dart Sass 成为官方实现
│
│ Ruby Sass 停止维护
│ LibSass 弃用
│
至今 ─── 持续更新迭代
Sass 的两种语法 #
1. 缩进语法(Sass) #
使用缩进表示嵌套,没有大括号和分号:
sass
// style.sass
$primary-color: #3498db
.container
width: 100%
padding: 20px
.item
color: $primary-color
&:hover
color: darken($primary-color, 10%)
2. SCSS 语法 #
使用大括号和分号,完全兼容 CSS 语法:
scss
// style.scss
$primary-color: #3498db;
.container {
width: 100%;
padding: 20px;
.item {
color: $primary-color;
&:hover {
color: darken($primary-color, 10%);
}
}
}
两种语法对比 #
| 特性 | Sass | SCSS |
|---|---|---|
| 文件扩展名 | .sass |
.scss |
| 大括号 | 不需要 | 需要 |
| 分号 | 不需要 | 需要 |
| 缩进 | 严格 | 不严格 |
| CSS 兼容 | 不兼容 | 完全兼容 |
| 学习曲线 | 需要适应 | 更容易 |
推荐使用 SCSS 语法,因为它与 CSS 完全兼容,学习成本更低。
Sass 的核心特性 #
1. 变量 #
scss
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font-family: $font-stack;
color: $primary-color;
}
2. 嵌套 #
scss
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
3. 模块化 #
scss
// _reset.scss
html, body, ul, ol {
margin: 0;
padding: 0;
}
// style.scss
@use 'reset';
body {
font-family: Helvetica, sans-serif;
}
4. 混合宏(Mixins) #
scss
@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. 继承 #
scss
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
6. 运算 #
scss
.container {
width: 100%;
}
.article {
width: 600px / 960px * 100%;
}
Sass 的优势 #
1. 提高开发效率 #
| 功能 | CSS | Sass |
|---|---|---|
| 定义主题色 | 重复书写 | 使用变量 |
| 嵌套选择器 | 重复父选择器 | 自动嵌套 |
| 浏览器前缀 | 手动添加 | Mixin 自动处理 |
| 响应式断点 | 重复媒体查询 | Mixin 封装 |
2. 增强可维护性 #
scss
// 统一管理变量
$breakpoints: (
mobile: 576px,
tablet: 768px,
desktop: 1024px,
wide: 1200px
);
// 使用函数获取
@mixin respond-to($breakpoint) {
@media (min-width: map-get($breakpoints, $breakpoint)) {
@content;
}
}
3. 模块化开发 #
text
styles/
├── abstracts/
│ ├── _variables.scss
│ ├── _mixins.scss
│ └── _functions.scss
├── base/
│ ├── _reset.scss
│ └── _typography.scss
├── components/
│ ├── _buttons.scss
│ └── _cards.scss
├── layout/
│ ├── _header.scss
│ └── _footer.scss
└── main.scss
4. 强大的生态系统 #
- Compass:成熟的 Mixin 库
- Bourbon:轻量级 Mixin 库
- Susy:响应式网格系统
- Breakpoint:媒体查询简化
Sass vs 其他预处理器 #
Sass vs Less #
| 特性 | Sass | Less |
|---|---|---|
| 实现 | Dart | JavaScript |
| 变量 | $var |
@var |
| 作用域 | 块级 | 延迟加载 |
| 循环 | 支持 | 有限支持 |
| 函数 | 丰富 | 基础 |
| 社区 | 最大 | 较大 |
Sass vs Stylus #
| 特性 | Sass | Stylus |
|---|---|---|
| 语法 | 严格 | 灵活 |
| 大括号 | 可选 | 可选 |
| 学习曲线 | 中等 | 较低 |
| 社区 | 最大 | 较小 |
| 文档 | 完善 | 一般 |
Sass 的应用场景 #
1. 大型项目 #
scss
// 使用模块化组织代码
@use 'abstracts/variables';
@use 'abstracts/mixins';
@use 'base/reset';
@use 'components/buttons';
@use 'layout/header';
2. 设计系统 #
scss
// 设计令牌
$colors: (
primary: (
base: #3498db,
light: lighten(#3498db, 10%),
dark: darken(#3498db, 10%)
),
secondary: (
base: #2ecc71,
light: lighten(#2ecc71, 10%),
dark: darken(#2ecc71, 10%)
)
);
3. 组件库 #
scss
// 可配置的组件
@mixin button-variant($background, $color) {
background-color: $background;
color: $color;
&:hover {
background-color: darken($background, 10%);
}
}
.btn-primary {
@include button-variant(#3498db, #fff);
}
浏览器兼容性 #
Sass 编译后生成标准 CSS,因此:
- 所有现代浏览器都支持
- 无需担心兼容性问题
- 可以使用任何 CSS 特性
学习建议 #
- 先掌握 CSS 基础:Sass 是 CSS 的扩展,扎实的 CSS 基础是前提
- 从变量开始:变量是最简单且最实用的功能
- 逐步学习:按照本指南的顺序循序渐进
- 多实践:在实际项目中使用 Sass
- 阅读源码:学习优秀项目的 Sass 代码
下一步 #
现在你已经了解了 Sass 是什么,接下来学习 安装配置,开始你的 Sass 之旅!
最后更新:2026-03-28