一、Sass 是什么?(通俗解释)
Sass(全称:Syntactically Awesome Style Sheets)是 CSS 的超集,可以理解为「增强版的 CSS」------ 它完全兼容原生 CSS,同时新增了很多 CSS 没有的便捷功能(比如变量、嵌套、混入、循环等),写样式时更高效、更易维护。
你可以把它理解成:
- 原生 CSS 是「手写纯文本」,只能一行行写重复代码;
- Sass 是「带格式刷 / 模板的编辑器」,能复用代码、简化写法,最后还能编译成浏览器能识别的原生 CSS。
二、Sass 核心优势(新手最常用)
1. 变量(解决重复值问题)
原生 CSS 里,若要改主题色,得逐个找 #42b983 这类颜色值替换;Sass 可以定义变量,改一处全生效:
scss
// Sass 写法(定义变量)
$primary-color: #42b983; // 主题绿
$swiper-height: 300px;
.swiper {
height: $swiper-height;
}
.slide {
color: $primary-color;
border-color: $primary-color;
}
编译后生成的 CSS:
css
.swiper {
height: 300px;
}
.slide {
color: #42b983;
border-color: #42b983;
}
2. 嵌套(贴合 HTML 结构,减少重复选择器)
原生 CSS 写嵌套结构要重复写父类,Sass 可以直接嵌套:
scss
// Sass 写法
.swiper {
width: 100%;
// 嵌套子元素,不用写 .swiper .slide
.slide {
display: flex;
// 嵌套伪类/伪元素
&:hover { // & 代表父选择器(.slide)
background: #f5f5f5;
}
}
}
编译后 CSS:
css
.swiper {
width: 100%;
}
.swiper .slide {
display: flex;
}
.swiper .slide:hover {
background: #f5f5f5;
}
3. 混入(@mixin,复用样式片段)
你之前代码里的 @include swiper-wrapper() 就是 Sass 的「混入」------ 把常用样式封装成函数,哪里需要就引入:
scss
// 定义混入(可传参数)
@mixin swiper-slide($height: 300px) {
height: $height;
display: flex;
justify-content: center;
align-items: center;
}
// 使用混入
.slide {
@include swiper-slide(400px); // 传参数
color: #333;
}
三、Sass 与 CSS 的关系
- 浏览器不识别 Sass :浏览器只能解析原生 CSS,所以 Sass 文件(
.scss/.sass)需要通过「编译器」(比如sass包、webpack/vite 的 sass-loader)编译成.css文件才能运行; - 两种语法格式 :
.scss:主流格式,兼容 CSS 语法(你代码里的<style lang="scss">就是这种);.sass:缩进式语法,不用花括号{}和分号;,类似 Python,新手较少用。
四、为什么你之前的代码会因 Sass 报错?
你粘贴的代码里写了:
scss
@import '@/styles/variables.scss'; // 项目自定义变量文件
@import '@/styles/mixins.scss'; // 项目自定义混入文件
@include swiper-wrapper(); // 使用自定义混入
这些都是你项目中不存在的自定义 Sass 文件 / 混入,且你的项目可能没装 Sass 编译器,所以会报:
- 「找不到 xxx.scss 文件」;
- 「无法识别 @include 语法」;
- 「缺少 sass 依赖」。
五、新手怎么用 Sass?
1. 安装依赖(Vue 项目)
bash
运行
# 安装 Sass 编译器(开发依赖)
npm install sass -D
# 或 yarn
yarn add sass -D
2. 在 Vue 组件中使用
vue
<style lang="scss" scoped>
// 直接写 Sass 语法,Vue 会自动编译
$primary: #42b983;
.swiper {
height: 300px;
.slide {
color: $primary;
&:active {
background: lighten($primary, 20%); // Sass 内置函数(调亮颜色)
}
}
}
</style>
总结
- 核心定义:Sass 是 CSS 预处理器,扩展了 CSS 语法,让样式编写更高效,最终编译为原生 CSS;
- 核心优势:变量、嵌套、混入、函数等,解决 CSS 重复代码、维护难的问题;
- 使用前提 :Vue 项目需安装
sass依赖,且组件样式标签要加lang="scss"; - 你之前的报错原因:缺少 Sass 依赖 + 引用了项目不存在的自定义 Sass 文件 / 混入。
简单来说,不用 Sass 也能写样式,但用了之后能大幅减少重复代码,尤其适合中大型项目。新手可以先从「变量」和「嵌套」入手,逐步熟悉。
Sass(你刚了解的)和 Stylus 都是 CSS 预处理器 (增强版 CSS),核心目标都是让样式编写更高效,但在语法风格、生态成熟度、使用场景上有明显区别。我会用新手能看懂的方式,从核心维度对比,还会结合示例让你直观感受差异。
一、核心区别总览表
表格
| 对比维度 | Sass(.scss 主流格式) | Stylus |
|---|---|---|
| 语法风格 | 接近原生 CSS,有花括号 / 分号 | 极简灵活,可省略花括号 / 分号 / 冒号 |
| 生态成熟度 | 最成熟,社区大、插件多 | 生态较小,偏小众 |
| 学习成本 | 低(兼容 CSS,新手易上手) | 中(语法太灵活,容易混乱) |
| 变量定义 | $变量名: 值 |
变量名 = 值 或 $变量名 = 值 |
| 嵌套语法 | 必须用 {} 包裹 |
可只用缩进,无需 {} |
| 混入(复用) | @mixin/@include |
@mixin 或直接定义函数 / 缩进 |
| 文件后缀 | .scss(主流)、.sass |
.styl |
| 主流使用场景 | 大型项目、UI 库(如 Element Plus) | 中小型项目、Node.js 生态(如 Nuxt 早期) |
| Vue 支持度 | 官方默认推荐,无需额外配置 | 需安装 stylus/stylus-loader |
二、最直观的区别:语法风格(核心差异)
1. Sass(.scss):贴近 CSS,规则明确
Sass 的 .scss 格式完全兼容原生 CSS,你可以把 CSS 直接复制进去用,只在需要时加预处理器功能:
scss
// Sass 写法(.scss)
$primary-color: #42b983; // 变量
$swiper-height: 300px;
.swiper {
height: $swiper-height; // 使用变量
// 嵌套子元素(必须用 {})
.slide {
color: $primary-color;
// 伪类嵌套(& 代表父选择器)
&:hover {
background: #f5f5f5;
}
}
}
// 混入(复用样式)
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.slide {
@include flex-center; // 使用混入
}
2. Stylus:极简灵活,可省略大部分符号
Stylus 追求「少写代码」,支持无花括号、无分号、无冒号 ,甚至变量的 $ 都能省略,语法非常自由:
stylus
// Stylus 写法(.styl)
primary-color = #42b983 // 变量(无 $、无分号)
swiper-height = 300px
// 无花括号、无分号,只用缩进
.swiper
height: swiper-height // 冒号也可省略:height swiper-height
// 嵌套子元素(只用缩进)
.slide
color primary-color // 无冒号、无分号
// 伪类嵌套(& 同样可用)
&:hover
background #f5f5f5
// 混入(更简洁,无需 @mixin)
flex-center()
display flex
justify-content center
align-items center
.slide
flex-center() // 使用混入
三、其他关键区别
1. 生态与社区
- Sass :是最早的 CSS 预处理器之一,生态最成熟:
- 几乎所有 UI 库(Element Plus、Ant Design Vue、Vant)都用 Sass 写样式;
- 内置函数极丰富(比如颜色调整
lighten()/darken()、数值计算calc()等); - 第三方插件 / 教程最多,遇到问题容易查解决方案。
- Stylus :偏小众,生态较弱:
- 主要在 Node.js 相关项目(如早期 Nuxt.js)中使用;
- 内置函数较少,自定义功能需要自己写;
- 教程和插件远少于 Sass,新手踩坑后难找到答案。
2. 学习成本与团队协作
-
Sass:学习成本低,因为语法贴近 CSS,团队协作时「写法统一」(花括号 / 分号强制规范),新人接手快;
-
Stylus :语法太灵活,比如同一段样式能写出多种写法:
stylus
// 同一段样式的 3 种 Stylus 写法(都生效) .slide { color: #42b983; } // 标准 CSS 写法 .slide { color #42b983 } // 省略分号 .slide color #42b983 // 省略花括号+分号这种灵活性在团队协作中容易导致代码风格混乱,新人需要适应「无规则」的写法。
3. Vue 项目中的使用成本
-
Sass :Vue 3 + Vite/Vue CLI 项目无需额外配置 ,安装
sass依赖后直接用:bash
运行
npm install sass -D组件中只需加
lang="scss":vue
<style lang="scss" scoped>/* 写 Sass 代码 */</style> -
Stylus :需要安装两个依赖,配置稍繁琐:
bash
运行
npm install stylus stylus-loader -D组件中加
lang="stylus":vue
<style lang="stylus" scoped>/* 写 Stylus 代码 */</style>
四、新手该怎么选?
表格
| 场景 | 推荐选择 | 原因 |
|---|---|---|
| 新手入门、团队开发 | Sass | 语法贴近 CSS,生态成熟,问题易解决 |
| 个人小项目、追求极简 | Stylus | 代码量少,写起来快(但仅限个人维护) |
| 对接主流 UI 库 | Sass | 几乎所有 UI 库都用 Sass,易复用样式 |
| Vue 3 新项目 | Sass | 官方更适配,配置成本低 |
总结
- 语法核心差异:Sass 贴近 CSS(有花括号 / 分号),Stylus 极简灵活(可省略所有符号);
- 生态与使用成本:Sass 生态更成熟、Vue 适配更好,新手 / 团队项目优先选;Stylus 偏小众,适合个人极简开发;
- 核心功能一致:两者都支持变量、嵌套、混入等核心功能,最终都会编译为原生 CSS,只是写法不同。
对你来说,既然已经在学 Swiper + Vue 的样式写法,优先掌握 Sass 就够了 ------ 它是行业主流,后续对接任何项目 / UI 库都能无缝适配。