首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第5章 样式处理
5.1 分离样式文件
5.1.1 extract-text-webpack-plugin
5.1.2 多样式文件的处理
5.1.3 mini-css-extract-plugin
5.2 样式预处理
5.2.1 Sass与SCSS
5.2.2 Less
5.3 PostCSS
5.3.1 PostCSS与Webpack
5.3.2 自动前缀
5.3.3 stylelint
5.3.4 CSSNext
5.4 CSS Modules
第6章 代码分片
6.1 通过入口划分代码
6.2 CommonsChunkPlugin
6.2.1 提取vendor
6.2.2 设置提取范围
6.2.3 设置提取规则
6.2.4 hash与长效缓存
6.2.5 CommonsChunkPlugin的不足
6.3 optimization.SplitChunks
6.3.1 从命令式到声明式
6.3.2 默认的异步提取
6.3.3 配置
6.4 资源异步加载
6.4.1 import()
6.4.2 异步chunk的配置
第7章 生产环境配置
7.1 环境配置的封装
7.2 开启production模式
7.3 环境变量
7.4 source-map
7.4.1 source-map原理
7.4.2 source-map配置
7.4.3 source-map安全
7.5 资源压缩
7.5.1 压缩JavaScript
7.5.2 压缩CSS
7.6 缓存
7.6.1 资源hash
7.6.2 输出动态HTML
7.6.3 使chunk id更稳定
7.7 bundle体积监控和分析
第8章 打包优化
8.1 HappyPack
8.1.1 工作原理
8.1.2 单个loader的优化
8.1.3 多个loader的优化
8.2 缩小打包作用域
8.2.1 exclude和include
8.2.2 noParse
8.2.3 IgnorePlugin
8.2.4 缓存
8.3 动态链接库与DllPlugin
8.3.1 vendor配置
8.3.2 vendor打包
8.3.3 链接到业务代码
8.3.4 潜在问题
8.4 去除死代码
8.4.1 ES6 Module
8.4.2 使用Webpack进行依赖关系构建
8.4.3 使用压缩工具去除死代码
当前位置:
首页>>
技术小册>>
Webpack实战:入门、进阶与调优(中)
小册名称:Webpack实战:入门、进阶与调优(中)
### 5.2.1 Sass与SCSS:深化CSS的编程能力 在前端开发的广阔领域中,CSS作为样式表语言,负责网页的布局与美化。然而,随着项目规模的扩大和复杂度的提升,原生CSS的局限性逐渐显现,如缺乏变量、嵌套规则、混合宏等高级功能。为了弥补这些不足,预处理器如Sass(Syntactically Awesome Stylesheets)和SCSS(Sassy CSS)应运而生,它们通过引入编程语言的特性,极大地增强了CSS的编写效率和可维护性。本章将深入探讨Sass与SCSS,帮助读者从入门到进阶,掌握这两种强大的CSS扩展语言。 #### 5.2.1.1 Sass与SCSS简介 **Sass**(最初的全称是“Syntactically Awesome Stylesheets”)是一种CSS预处理器,它允许你使用变量、嵌套规则、混合(mixins)、导入(imports)等特性来编写更加高效、可维护的样式代码。Sass有两种语法格式:**SCSS**(Sassy CSS)和**Indented Sass**(也称为“Sass语法”)。SCSS是Sass的一个扩展,其语法完全兼容CSS,这意味着任何有效的CSS代码都是有效的SCSS代码,反之则不然。由于SCSS的易用性和广泛的兼容性,它成为了Sass项目中更为流行的选择。 #### 5.2.1.2 安装与配置Sass/SCSS 要在项目中使用Sass/SCSS,首先需要安装相应的编译工具。Sass支持多种编译方式,包括命令行工具、构建工具(如Webpack、Gulp)集成、以及IDE插件等。 **1. 命令行安装Node-Sass(已废弃,推荐使用Dart Sass)** 虽然Node-Sass曾是Sass的官方JavaScript实现,但由于维护问题,官方推荐使用Dart Sass作为替代。安装Dart Sass可以通过npm(Node.js的包管理器)完成: ```bash npm install -g sass ``` 这将全局安装Sass,使你能够在命令行中直接使用`sass`命令编译Sass/SCSS文件。 **2. Webpack集成Sass/SCSS** 对于使用Webpack的项目,可以通过安装`sass-loader`、`sass`(Dart Sass)、`css-loader`、`style-loader`等loader来实现Sass/SCSS文件的编译和加载。 ```bash npm install --save-dev sass-loader sass css-loader style-loader ``` 然后,在Webpack配置文件中(通常是`webpack.config.js`),添加相应的module规则来处理`.scss`或`.sass`文件。 #### 5.2.1.3 Sass/SCSS基础语法 **1. 变量** Sass/SCSS允许你定义变量,并在整个样式表中重用它们,这有助于减少重复代码并保持样式的一致性。 ```scss $primary-color: #333; body { color: $primary-color; } ``` **2. 嵌套规则** Sass/SCSS的嵌套规则允许你将CSS选择器嵌套在其他选择器内部,从而更清晰地表达元素之间的层级关系。 ```scss nav { ul { margin: 0; padding: 0; list-style: none; li { display: inline-block; margin-right: 10px; a { text-decoration: none; color: blue; &:hover { color: red; } } } } } ``` **3. 混合(Mixins)** 混合允许你将一组CSS声明组合在一起,并通过`@mixin`指令声明,然后在需要的地方通过`@include`指令调用。 ```scss @mixin clearfix { &:after { content: ""; display: table; clear: both; } } .container { @include clearfix; } ``` **4. 继承** Sass/SCSS通过`@extend`指令实现样式的继承,这允许一个选择器继承另一个选择器的所有样式,并可以添加额外的样式声明。 ```scss .button { border: 1px solid #ccc; padding: 10px; color: #333; } .button-primary { @extend .button; background-color: blue; color: white; } ``` **5. 导入(Imports)** Sass/SCSS支持使用`@import`指令来导入其他Sass/SCSS文件,这有助于将样式表分割成多个易于管理的文件。 ```scss @import 'base'; @import 'components/button'; ``` #### 5.2.1.4 进阶应用:函数、控制指令与条件语句 **1. 函数** Sass/SCSS内置了一系列函数,用于执行颜色操作、数学计算等任务,并允许你自定义函数来满足特定需求。 ```scss $base-color: #0c6; @function adjust-hue($color, $degrees) { @return adjust-hue($color, $degrees); } body { background-color: adjust-hue($base-color, 30deg); } ``` 注意:上例中`adjust-hue`函数实际为Sass内置函数,这里仅用于说明函数的使用方式。 **2. 控制指令** Sass/SCSS提供了几种控制指令,如`@if`、`@else if`、`@else`和`@for`、`@each`等,用于在样式表中实现条件逻辑和循环。 ```scss @for $i from 1 through 3 { .item-#{$i} { width: 100px * $i; } } @each $animal in puma, sea-slug, egret, salamander { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); } } ``` **3. 条件语句** 使用`@if`、`@else if`、`@else`可以在Sass/SCSS中编写条件逻辑。 ```scss $type: monster; p { @if $type == ocean { color: blue; } @else if $type == matador { color: red; } @else { color: black; } } ``` #### 5.2.1.5 性能调优与最佳实践 **1. 避免过度嵌套** 虽然Sass/SCSS的嵌套规则非常强大,但过度使用会导致CSS选择器变得复杂且难以维护。建议保持嵌套层级在合理范围内。 **2. 使用混合而非继承** 尽管Sass/SCSS的继承功能在某些情况下很有用,但过度使用可能会导致编译后的CSS文件体积增大,因为每个使用`@extend`的地方都会复制被继承的样式。相比之下,混合(mixins)通常更加高效。 **3. 压缩CSS** 在生产环境中,应使用CSS压缩工具(Webpack的`css-minimizer-webpack-plugin`等)来减小CSS文件的大小,提高加载速度。 **4. 缓存策略** 合理配置缓存策略,可以减少浏览器对未修改CSS文件的请求,进一步提升页面加载性能。 #### 5.2.1.6 总结 Sass与SCSS作为CSS的扩展语言,通过引入变量、嵌套规则、混合、函数、控制指令等高级特性,极大地提高了CSS的编写效率和可维护性。掌握Sass/SCSS不仅能让你的样式代码更加整洁、高效,还能帮助你在大型项目中更好地组织和管理样式。通过本章的学习,你应该能够理解Sass/SCSS的基本概念、安装配置方法、基础语法以及进阶应用,并学会如何在实际项目中运用Sass/SCSS来优化你的样式编写流程。
上一篇:
5.2 样式预处理
下一篇:
5.2.2 Less
该分类下的相关小册推荐:
Webpack零基础入门
全解webpack前端开发环境定制
Webpack实战:入门、进阶与调优(下)
Webpack实战:入门、进阶与调优(上)
webpack指南