Sass(Syntactically Awesome Style Sheets)是CSS预处理器,扩展了CSS的功能,使样式代码更易于编写和维护。
特点:
1.支持 变量、嵌套、混合(Mixins)、继承、模块化 等高级功能。
2.语法更强大,适合复杂项目。
有两种语法格式:
.scss(Sassy CSS):兼容 CSS 语法,使用 {} 和 ;。
.sass(缩进语法):省略 {} 和 ;,依赖缩进(不常见)。
示例:
// 变量
$primary-color: #42b983;
// 嵌套
.container {
background: $primary-color;
&:hover { opacity: 0.8; } // & 表示父选择器
}
// 混合(Mixins)
@mixin flex-center {
display: flex;
justify-content: center;
}
.box { @include flex-center; }
编译:
需通过工具(如 sass、webpack、vite)编译为原生 CSS。
安装 Sass:
npm install sass --save-dev
接下来我用简单的方式解释Sass有什么用!
1. Sass 是 CSS 的“增强版”
想象一下:
原生 CSS 像记事本——只能一行行写基础样式。
Sass 像 Word——可以自动编号、批量替换、分章节管理,效率翻倍!
2. Sass 解决 CSS 的 4 大痛点
痛点 1:重复写相同值
-
CSS 写法:
.header { color: #ff0000; } .button { background-color: #ff0000; } /* 想改红色?得手动一个个找 #ff0000 替换! */
-
Sass 写法(用变量存颜色):
-
$main-color: #ff0000; // 定义变量 .header { color: $main-color; } .button { background-color: $main-color; } /* 只需改 $main-color,所有用到的地方自动更新! */
痛点 2:嵌套层级太深
-
CSS 写法(重复写父选择器):
.nav { ... } .nav ul { ... } .nav ul li { ... } .nav ul li:hover { ... }
-
Sass 写法(嵌套结构,清晰直观):
.nav { ul { li { &:hover { ... } // & 代表父级 li } } }
痛点 3:重复写相似样式
-
CSS 写法(每个按钮重复写 flex 居中):
.btn-primary { display: flex; justify-content: center; } .btn-secondary { display: flex; justify-content: center; }
-
Sass 写法(用
@mixin
定义可复用的代码块):@mixin flex-center { // 定义混合 display: flex; justify-content: center; } .btn-primary { @include flex-center; } // 引入 .btn-secondary { @include flex-center; }
痛点 4:样式无法动态计算
-
CSS 无法做到:
.box { width: 100px + 20px; } /* 无效! */
-
Sass 可以(支持数学运算):
$base-width: 100px; .box { width: $base-width + 20px; } // 编译为 width: 120px;
3. Sass 还能做什么?
-
条件判断:根据场景生成不同样式
$theme: "dark"; .box { @if $theme == "dark" { background: #000; } @else { background: #fff; } }
-
循环:批量生成相似样式
@for $i from 1 through 3 { .item-#{$i} { margin-left: 10px * $i; } } /* 编译结果: .item-1 { margin-left: 10px; } .item-2 { margin-left: 20px; } .item-3 { margin-left: 30px; } */
4. 实际项目中的 Sass
最终效果:写的更少,做的更多,维护更轻松!
-
Vue/React 项目:
<style scoped lang="scss"> $primary: blue; .button { background: $primary; &:hover { background: darken($primary, 10%); } // 颜色变深10% } </style>
-
全局管理颜色/字体:
新建_variables.scss
:$colors: (primary: #42b983, danger: #ff0000); $font-sizes: (small: 12px, medium: 16px);
其他文件直接引用:
@use './variables' as *; .alert { color: map-get($colors, danger); }
一句话总结
Sass 让 CSS 变成“编程式”样式表:
-
用 变量 避免重复,
-
用 嵌套 减少冗余代码,
-
用 混合/函数 实现复用,
-
用 逻辑控制 动态生成样式。
-