FORMA

Sass 简介与安装

Sass(Syntactically Awesome Style Sheets)是 CSS 预处理器:在 CSS 语法上增加变量、嵌套、混合、模块、控制指令等能力,最终编译为标准 CSS 供浏览器使用。不能在浏览器中直接运行 .scss / .sass 文件,必须先编译。

一、Sass 是什么

Sass 是预处理器的产品名,而不是某一种具体的文件格式。它的价值在于弥补原生 CSS 早期缺乏变量、嵌套、逻辑控制等能力的短板,让样式代码更易维护、更易复用。随着原生 CSS 陆续引入自定义属性、原生嵌套等特性,Sass 与 CSS 的边界有所重叠,但在跨文件变量主题、带参数的 Mixin、编译期循环生成样式等场景,Sass 仍然是主流选择。

text
.scss / .sass 源文件 → Dart Sass 编译 → .css → 在 HTML 中引用

二、两种语法:SCSS 与缩进语法

Sass 提供两种源码语法,编译目标相同,选择其一即可,不能在同一文件内混用:

语法扩展名特点
SCSS.scss使用 {};,合法 CSS 即合法 SCSS;当前绝对主流
缩进语法.sass{}、无 ;,靠缩进表达层级;历史上更早出现

对比维度

对比维度SCSS缩进语法(Sass)
文件扩展名.scss.sass
语法风格大括号 {} 表示嵌套层级,分号 ; 分隔属性缩进(通常两个空格)表示嵌套层级,无大括号、无分号
与 CSS 的关系CSS 的超集——任何合法 CSS 代码都是合法 SCSS 代码完全不同的语法,CSS 代码不能直接复制到 .sass 文件中
学习曲线平缓,CSS 开发者零成本上手较陡,需适应基于缩进的书写方式
可读性清晰易读,尤其是较长的样式文件简洁干净,适合习惯 Python 缩进风格的人
社区流行度绝对主流,绝大多数项目使用 .scss小众,多用于个人偏好或老项目

代码示例对比

SCSS(.scss

scss
$primary-color: #3498db;

.nav {
  ul {
    margin: 0;
    li {
      display: inline-block;
      a {
        color: $primary-color;
        &:hover {
          text-decoration: underline;
        }
      }
    }
  }
}

缩进语法(.sass

sass
$primary-color: #3498db

.nav
  ul
    margin: 0
    li
      display: inline-block
      a
        color: $primary-color
        &:hover
          text-decoration: underline

可以看出:SCSS 保留了 {};,符合传统 CSS 习惯;缩进语法用换行与缩进替代大括号和分号。

历史背景

  • 2006 年:最初的 Sass 语法就是缩进语法.sass),设计灵感来自 Haml,旨在减少符号噪音。
  • 2010 年:Sass 3 引入了 SCSS.scss),目的是降低 CSS 开发者的入门门槛。此后 SCSS 迅速成为主流,原缩进语法被很多人称为“老式 Sass”。

实际项目中如何选择

场景推荐
新项目、团队协作、大多数日常工作SCSS —— 生态系统全面,IDE 支持好,易于迁移和维护
个人极简主义偏好,希望代码更精简缩进语法(.sass)—— 但不建议团队使用
维护已有 .sass 的老项目保持原样,或逐步迁移到 SCSS(可混用不同文件)

结论:二者是同一预处理器的不同语法;新项目与团队协作请默认 SCSS(.scss。日常说「用 Sass」多数场景下指的就是 SCSS

三、核心能力速览

特性说明
变量、嵌套、运算$name: value、选择器嵌套、数学/颜色运算 → 详见 语法基础
Mixin、继承@mixin / @include@extend%placeholder → 详见 复用机制
模块、内置函数、控制指令@use 替代 @importsass:* 内置模块、@if/@for/@each → 详见 模块与控制流

四、安装与使用

安装 Dart Sass(官方实现)

bash
npm install -D sass
npx sass --version

也可用 Homebrew 安装独立 CLI(见 Sass 安装)。现代工作流不需要 Ruby。

实现状态
Ruby Sass已停止维护
LibSass / node-sass已弃用,勿用于新项目
Dart Sass官方唯一推荐实现

常用 CLI

命令说明
sass input.scss output.css单文件编译
sass --watch scss:css监听目录
sass --style=compressed in.scss out.css压缩输出
sass --source-map ...生成 source map

除法运算请使用 sass:mathmath.div()(见 运算)。

在构建工具中使用

工具说明
Vite安装 sass 后即可直接 import './x.scss'
Webpacksass-loader + sass
Vue / React单文件组件 lang="scss" + 项目依赖 sass

五、常见错误

现象处理
变量未定义检查 $、作用域、@use 命名空间是否正确
/ 被当除法警告使用 math.div() 或原生 calc()
.sass 缩进错误统一 2 空格缩进,勿混用 Tab
SCSS 与 .sass 混用报错两种语法不能在同一文件内混写,需分文件维护

参考文献

资料说明
Sass 官方文档语法与 API
Sass 安装Dart Sass 安装方式
Sass:SyntaxSCSS 与缩进语法
Sass:@use模块系统