CSS、Sass 与 Less
本文对比原生 CSS 与两种主流预处理器 Sass(通常指 SCSS 语法)、Less,便于选型。语法细节见 Sass 简介、Less 核心语法。
分别是什么
| 名称 | 类型 | 说明 |
|---|---|---|
| CSS | 样式表语言 | 浏览器直接解析;现代 CSS 已支持嵌套、自定义属性(--var)、@layer 等 |
| Sass | CSS 预处理器 | 官方实现为 Dart Sass(npm 包 sass),需编译为 CSS |
| SCSS | Sass 的一种语法 | 使用 {} 与 ;,合法 CSS 即合法 SCSS,为当前主流写法(.scss) |
| Less | CSS 预处理器 | JavaScript 实现,npm 包 less,需编译为 CSS |
Sass 与 SCSS 是同一工具的不同语法:
.sass为缩进语法,.scss为大括号语法。日常说「用 Sass」多指 SCSS。
核心对比
| 维度 | CSS | SCSS | Less |
|---|---|---|---|
| 浏览器直接运行 | 是 | 否(需编译) | 否(需编译) |
| 变量 | 自定义属性 --x | $x | @x |
| 嵌套 | 原生嵌套(现代浏览器) | 支持(&) | 支持(&) |
| 复用块 | @layer、类名 | @mixin / @include | 混合(.mixin()) |
| 模块化 | @import(原生,有层叠问题) | 推荐 @use | @import |
| 逻辑 | 有限(@media、@supports 等) | @if、@for、@each 等 | when 守卫、较少循环 |
| 官方编译器 | — | Dart Sass(npm i -D sass) | Less(npm i -D less) |
Sass:SCSS 与缩进语法
SCSS(.scss) | 缩进语法(.sass) | |
|---|---|---|
| 与 CSS | 超集,可复制粘贴 CSS | 语法不同,不能直接贴 CSS |
| 采用率 | 主流 | 少见,多为历史项目 |
新项目建议 SCSS,勿将缩进语法作为团队默认。
何时用原生 CSS
- 样式量少、无构建步骤的静态页
- 团队规范以现代 CSS 为主(嵌套、
clamp()、自定义属性、Grid/Flex) - 不希望增加编译链路
预处理器仍擅长:跨文件变量主题、@mixin 参数化、复杂循环生成样式 等原生不便表达的场景。
何时用 SCSS
- 中大型项目、组件库源码(如 Bootstrap 5+ 使用 Sass)
- 需要
@use模块化、@mixin带参数、@content等 - 与 Vite / Webpack 等已集成
sass的工具链配合
无历史包袱时,SCSS 是常见默认选择。
何时用 Less
- 维护已基于 Less 的主题或工程(如 Ant Design 4 及更早版本的主题变量体系)
- 团队已有 Less 规范与
less-loader配置 - 需要较轻量的 JS 侧编译器(
lessc)
Ant Design 5+ 采用 CSS-in-JS 方案,不再以 Less 作为默认样式入口;选型请以所用 UI 库官方文档为准。
构建工具
Vite、Webpack、Vue CLI 等均可通过安装 sass 或 less 处理对应文件,无需单独安装 Ruby。
与原生 CSS 演进的关系
原生 CSS 已逐步吸收部分预处理概念(嵌套、变量、color-mix() 等),但循环、带参 mixin、模块 @use 等仍依赖预处理器。采用 SCSS 语法与原生嵌套、逻辑属性并存的项目较多。
变量:SCSS $ 与 CSS --
SCSS $variable | CSS --custom-property | |
|---|---|---|
| 生效阶段 | 编译期替换为具体值 | 运行时由浏览器解析 |
| 作用域 | 文件/模块(@use 命名空间) | 继承、受层叠与 DOM 结构影响 |
| 用于选择器、属性名 | 可以(如 #{$id} 插值) | 不行(仅属性值等) |
| 参与媒体查询 | 可以(编译期已知) | 不行(需 @custom-media 等) |
// SCSS:编译后消失
$gap: 1rem;
.card { padding: $gap; }
/* CSS:保留在输出中,可随主题切换 */
:root {
--gap: 1rem;
}
.card {
padding: var(--gap);
}
主题切换、深色模式、组件库对外 API 常优先 CSS 自定义属性;设计令牌源文件用 SCSS 变量 生成多主题 CSS 也常见。
速查
| 需求 | 建议 |
|---|---|
| 零编译、依赖最少 | CSS(善用现代特性) |
| 功能完整、生态大、长期维护 | SCSS + Dart Sass |
| 延续 Less 主题 / 老项目 | Less |
| Bootstrap 5+、多数新 UI 源码 | SCSS |
参考文献
以下链接在编写时均可正常访问:
| 资料 | 说明 |
|---|---|
| Sass 官方文档 | SCSS 语法、@use、编译(英文) |
| Less 官方文档 | 语法与函数(英文) |
| MDN:CSS | 原生 CSS 参考 |
| MDN:使用 CSS 自定义属性 | --* 变量 |
| Sass:@import 弃用说明 | 迁移至 @use |
相关文章
Less 基础与核心语法
Less 是 JavaScript 实现的 CSS 预处理器,在 CSS 语法上扩展变量(@)、嵌套、混合、运算与函数,编译为普通 CSS 后由浏览器加载;本文覆盖安装、CLI、构建工具集成与全部核心语法。
Sass 简介与安装
Sass(Syntactically Awesome Style Sheets)是 CSS 预处理器,在 CSS 语法上增加变量、嵌套、混合、模块、控制指令等;有 SCSS 与缩进语法两种源码语法,官方实现为 Dart Sass。
模块与控制流:@use、内置函数、@if/@for/@each
Dart Sass 推荐用 @use/@forward 替代已弃用的 @import;内置 sass:* 模块提供颜色、字符串、列表、Map、数学等函数;@if/@for/@each/@while 用于条件与循环生成样式。
复用机制:Mixin 与继承
Mixin(@mixin/@include)支持参数与 @content,适合动态样式;@extend 与 %placeholder 通过合并选择器复用完全相同的静态样式,减少 CSS 体积。
语法基础:变量、嵌套与运算
Sass 语法基础:$ 变量与插值、选择器嵌套与 & 父选择器引用、数学/颜色/字符串运算、三种注释语法及与原生 CSS 嵌套的关系。
颜色与背景
color 设置前景(多为文字)色;background-* 设置元素背景(颜色、图像、渐变)。二者共同决定对比度与视觉层次,直接影响 无障碍 阅读体验。排版中的文本颜色用法见 排版与文本。
Series
css
3 / 20