Skip to content

参考:Sass 速查与对照表 ​

基于 Dart Sass 1.101.0 · 核于 2026-07

速查 ​

  • 定位:CSS 预处理器,编译成 CSS。两种语法:SCSS(.scss,CSS 超集,最流行)/ 缩进语法(.sass)。当前实现 Dart Sass 1.101.0;LibSass/Ruby Sass 已 EOL。
  • 变量:$x,编译期消除;!default(未定义才赋)、!global(改已声明的全局)。
  • 嵌套:& 父选择器(&:hover/&__el/&--mod/[dir] &),只能放复合选择器开头;嵌套属性 font: { family; weight }。
  • 复用:@mixin/@include/@content(出样式)、@function/@return(算值)、@extend + %(并选择器)。
  • 控制流:@if/@else if/@else、@each(列表/map 解构)、@for(through 含终点/to 不含)、@while。
  • 模块系统:@use(命名空间加载、只加载一次、as/as */with)、@forward(转发、show/hide/as prefix-*/with !default);私有成员 -/_ 前缀。
  • @import 弃用:1.80.0 弃用、计划 3.0.0 移除,改用 @use;官方 sass-migrator 自动迁移。
  • 内置模块:sass:math/color/string/list/map/selector/meta,@use 'sass:xxx' 加载。
  • 两大迁移:/ 除法(1.33.0 弃用)→ math.div();darken/lighten 等(1.79.0 弃用)→ color.adjust/color.scale。

一、核心 at-rule 速查 ​

at-rule作用
@use带命名空间加载模块(推荐,取代 @import)
@forward转发模块公共成员给下游,搭库入口
@import引入文件(已弃用,1.80.0 起,3.0.0 移除)
@mixin / @include定义 / 引入可复用样式块
@contentmixin 内占位,接收 @include 传入的样式块
@function / @return定义 / 返回计算值
@extend继承并合并选择器
@if / @else if / @else条件分支
@each遍历列表 / map
@for按数值范围循环
@while条件循环
@at-root把嵌套规则提升到根层输出
@debug / @warn / @error调试输出 / 告警 / 报错

二、变量标志速查 ​

标志含义约束
!default仅当变量未定义或为 null 时才赋值库给默认值、允许 with 覆盖
!global在局部作用域修改全局变量只能改已在顶层声明的变量,不能新建

局部块内同名赋值默认是遮蔽(不改全局);@if/循环块不创建新作用域。

三、& 父选择器速查 ​

写法编译结果用途
&:hover.parent:hover伪类
&__title.parent__titleBEM 元素
&--active.parent--activeBEM 修饰符
[dir=rtl] &[dir=rtl] .parent反转上下文
&.is-open.parent.is-open与其它选择器组合

& 只能放在复合选择器开头(span& 非法);样式规则外 & 为 null。

四、模块系统速查 ​

语法作用
@use 'file'加载,命名空间 = 文件名,file.$x / file.fn()
@use 'file' as x自定义命名空间 x
@use 'file' as *并入全局(慎用,仅限自己的文件)
@use 'file' with ($x: 1)加载并配置带 !default 的变量(as 须在 with 前)
@forward 'file'转发公共成员给下游
@forward 'file' show a, $b白名单转发
@forward 'file' hide a黑名单转发
@forward 'file' as p-*转发时批量加前缀
@forward 'file' with ($x: 1 !default)改上游默认、留下游可覆盖
$-name / %-name私有成员 / 私有占位符(仅本文件)

每个模块只加载一次;@use 须在文件开头;模块只在首次加载时接受配置。

五、内置模块速查 ​

模块代表函数
sass:mathmath.div、math.round/ceil/floor、math.percentage、math.abs、math.min/max、math.pow/sqrt、math.$pi/math.$e
sass:colorcolor.adjust、color.scale、color.change、color.mix、color.complement、color.invert、color.grayscale
sass:stringstring.length、string.slice、string.index、string.insert、string.to-upper-case、string.unquote/quote
sass:listlist.length、list.nth、list.append、list.join、list.index、list.zip(不可变、1-based)
sass:mapmap.get、map.has-key、map.set、map.merge、map.keys、map.values
sass:selectorselector.nest、selector.unify、selector.append、selector.is-superselector
sass:metameta.keywords、meta.load-css、meta.type-of、meta.inspect、meta.module-variables、meta.call

全局别名逐步弃用、改走命名空间;例外:颜色构造器 rgb()/hsl()/hwb() 仍仅全局。

六、破坏性变更 / 弃用时间线(节选) ​

特性Dart Sass 版本迁移
@import1.80.0 弃用 → 3.0.0 移除@use/@forward(sass-migrator)
旧全局颜色函数(darken/lighten 等)1.79.0 弃用color.adjust/color.scale
/ 作除法运算符1.33.0 弃用math.div()
以 -- 开头的函数/mixin 名1.76.0改名
声明与嵌套规则混排1.77.7调整顺序

完整清单见官方 Breaking Changes。

七、@use vs @import 对照 ​

维度@use(推荐)@import(已弃用)
成员可见性命名空间隔离、可私有全部全局
加载次数每模块一次每次引入都执行输出
@extend 范围限上游模块、可控全局、不可预测
配置库with + !default先改全局变量再 import(脆弱)
私有成员支持(-/_)不支持
书写位置文件开头任意位置
状态官方主推1.80.0 弃用、计划 3.0.0 移除

八、@extend vs @mixin 对照 ​

维度@extend@mixin
机制合并选择器(.a, .b { })复制展开样式
参数不支持支持(默认/关键字/可变参数)
语义「A 是一种 B」「复用一段样式模式」
跨 @media❌ 不能✅ 可以
隐式牵连会影响所有出现被继承选择器处无,独立
产物体积更紧凑有重复(现代压缩可消化)

九、选型对比:Sass vs Less vs PostCSS vs CSS 自定义属性 ​

维度SassLessPostCSSCSS 自定义属性
类型预处理器预处理器后处理/转换平台浏览器原生运行时
变量$x,编译期@x,编译期靠插件--x,运行时可变
逻辑能力强(mixin/函数/控制流/模块)中取决于插件无
需构建是是是否
运行时动态无(编译期消除)无无有(随元素/主题变)
典型定位成熟工程化样式抽象轻量、JS 生态加前缀/降级新语法/原子化管线主题换肤、运行时可变值

选型速记:要成熟全能的样式工程化 → Sass;更轻或在 Less 生态 → Less;按标准做转换(Autoprefixer、未来语法降级)→ PostCSS(常与 Sass 叠用);运行时随主题动态变化的值 → CSS 自定义属性(与 Sass 互补)。

十、常见坑对照 ​

现象根因解法
/ 除法告警/结果异常/ 作除法已弃用用 math.div($a, $b)
darken() 告警旧全局颜色函数弃用用 color.scale/color.adjust
@import 告警1.80.0 起弃用改 @use/@forward,或跑 sass-migrator
@use ... with 报错as 写在了 with 后 / 重复配置同一模块as 在前;配置只在首次加载
@extend 报错跨 @media 或扩展了复合选择器改用 mixin,或只扩展简单选择器
拼错函数名不报错未知函数被当普通 CSS 输出对产物跑 CSS lint
span& 报错& 只能放复合选择器开头换写法(如 & span 或调整结构)
用了 node-sass 却缺特性LibSass/node-sass 已 EOL换 Dart Sass(sass 包)

十一、权威链接 ​