技术分享
🗒️css预处理器
00 分钟
2024-11-10
2024-11-10
type
status
date
slug
summary
tags
category
icon
password

CSS预处理器的介绍

CSS预处理器是一种在编写CSS样式之前的预处理工具,让CSS语法变得更“可编程化”,提供了一些传统编程语言才有的特性,使得CSS代码更具灵活性和可维护性,它允许开发者使用增强的语法特性来编写CSS代码,比如变量、嵌套、函数等。预处理器将这种更复杂的代码编译成标准的CSS文件,最终可以被浏览器解析和使用。
notion image

为什么需要CSS预处理器

  1. 提高代码的可读性和组织性:CSS预处理器支持嵌套语法,可以更清晰地展示元素之间的层级关系。
  1. 增强代码复用性:预处理器允许使用变量、混合、继承等功能,可以减少代码重复,提高开发效率。
  1. 支持模块化:可以将样式代码分成不同的模块,便于维护和更新。
  1. 计算功能:一些CSS属性值需要根据具体情况计算,预处理器提供数学运算功能,可以直接在样式代码中实现。

常见的CSS预处理器

  1. Sass (Syntactically Awesome Style Sheets):支持变量、嵌套、运算等,语法简洁,功能强大,支持.scss.sass两种不同风格的语法。
    1. 在Sass中,.scss语法风格是最常用的,比.sass风格更受欢迎,主要原因如下:
      1. 语法更接近CSS.scss(Sassy CSS)语法几乎完全兼容CSS语法,可以直接从已有的CSS文件迁移,不用重写代码。而.sass使用缩进代替大括号和分号,看起来更简洁,但可能不太符合习惯标准CSS语法的开发者的使用习惯。
      2. 学习成本低:因为.scss语法几乎就是CSS的扩展,CSS开发者可以轻松上手,而不需要适应新的缩进和空格规则。
      3. 社区推荐和支持:绝大多数Sass的教程、文档和代码示例都基于.scss语法,因此新项目通常会采用.scss作为规范。
  1. LESS:最早的CSS预处理器之一,语法上与CSS更接近,简单易上手,支持变量、嵌套等功能。
  1. Stylus:提供了更自由的语法,支持无分号、无花括号等简写形式,更加灵活且语法较为个性化。

目前流行的CSS预处理器

目前,Sass是最流行的CSS预处理器,广泛应用于各种前端项目中,且有大量的社区支持。LESS也有一定的用户基础,特别是在一些老的前端项目中依然常见。Stylus相对小众,主要用于一些追求极简语法的项目。
 
 

SCSS写法

1. 嵌套规则 (Nesting)
用法说明
嵌套允许我们在 SCSS 中直观地表达 HTML 的层次关系,不用重复写选择器。但嵌套仅表示层次,不会自动继承样式。
示例代码
案例说明
  • .navbarbackground-colorcolor 只作用于 .navbar
  • .nav-itempadding 只作用于 .nav-item&:hover 是一个伪类表示 .nav-item 的悬停状态。
编译后代码

2. 变量 (Variables)
用法说明
变量用于存储一些常用值,比如颜色、字体,方便在多个地方复用。
示例代码
案例说明
  • $primary-color$font-stack 是变量,定义后可以在样式中直接引用。
  • 修改变量值会同步更新所有引用的地方。
编译后代码

3. 嵌套属性 (Nested Properties)
用法说明
将共同前缀的属性写在一起,减少代码重复。
示例代码

案例说明

  • borderwidthstylecolor 属性嵌套在一起,更清晰。
  • 编译后展开为普通 CSS。
编译后代码

4. 混入 (Mixins)
用法说明
定义可复用的代码片段,支持带参数,调用时使用 @include
示例代码
案例说明
  • @mixin rounded($radius) 定义了一个可以接受参数的 Mixin。
  • .button 调用 Mixin,应用了 5px 的圆角效果。
编译后代码

5. 继承 (Inheritance)
用法说明
使用 @extend 继承其他选择器的样式,便于复用。
示例代码
案例说明
  • .success 继承了 .messagepaddingborder 样式。
  • .success 额外定义了 background-color
编译后代码

6. 运算 (Operations)
用法说明
SCSS 支持数值、颜色等运算,便于灵活调整样式。
示例代码
案例说明
  • padding 的值是 $base-padding 的两倍。
  • 使用 lighten 函数将颜色 #3498db 提亮 20%。

编译后代码


7. 控制指令与函数
用法说明
控制指令 @if@for@each 用于控制样式的条件和循环逻辑,使样式更动态。
示例代码
案例说明
  • @mixin set-color 根据 $type 的值动态选择颜色。
  • .title 调用了 set-color Mixin,应用了 primary 的颜色。
编译后代码

8. 模块化 (Partials 和 @import/@use)
用法说明
SCSS 支持将样式拆分为多个文件,通过 @import@use 引入部分文件(Partial)。
示例代码
案例说明
  • _variables.scss 是部分文件(以 _ 开头),其中定义了 $primary-color 变量。
  • styles.scss 通过 @import 引入了 _variables.scss 文件中的变量。
编译后代码

9. 内置函数
用法说明
SCSS 提供了许多内置函数,比如 lightendarkenmix 等,用于颜色、列表、字符串等操作。
示例代码
案例说明
  • lighten 函数将颜色 #3498db 提亮 10%。
编译后代码

总结
这些 SCSS 功能大大提升了样式代码的复用性和维护性,尤其适合大型项目的样式管理,通过变量、嵌套、Mixin、继承等功能,使得样式代码更加模块化和简洁。