SASS的知识体系构建

本文详细介绍了Sass的安装、编译、语法格式、Sass Script、嵌套、混合、@-Rules及指令的使用,特别讨论了变量、数据类型、运算、函数以及BEM架构在Sass中的应用。通过对Sass知识体系的梳理,旨在帮助开发者更好地理解和掌握Sass的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然已经在多个项目中使用过sass,但在研究element sass搭建UI框架的源码中,发现很多自己没用过的高级用法,借着这次总结对sass的知识体系进行详细的梳理。

在这里插入图片描述

Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。

1安装编译

1.1 安装

  • 安装ruby(mac下自带Ruby无需在安装Ruby!)

    • 官网https://rubyinstaller.org/downloads/中下载 安装包,傻瓜式安装安装完成运行CMD ,输入命令ruby -v,安装成功会打印版本号

    • 删除替换原gem源

    //删除替换原gem源 
    gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
    
    //查看gem源
    gem sources -l
    
    //查看gem安装的内容
    gem list
    
    
  • 安装sass与compass

gem install sass
gem install compass

//安装指定版本
gem install sass --version=3.3

//查看安装版本
sass -v
compass -v

1.2 编译

在这里插入图片描述

  • 命令行编译
//单文件编译;进入scss目录
sass demo.scss demo.css

//监听文件下的scss文件;进入scssTest目录
sass --watch scss:css   //将scss目录中的文件编译为css,存放至css目录

  • 命令行指令
--watch   监听文件变化并执行编译
--no-catch 不生成.sass-cache 文件
--sourcemap 添加调试map
--style 选择编译格式 (nested``expanded``compact``compressed)

//选择编译格式并添加调试map
sass --watch input.scss:output.css --style expanded --sourcemap
  • 软件方式编译

    koala&codekit,它们是优秀的编译器;支持Less、Sass、Compass、CoffeeScript,不做过多说明

  • Live Sass编译器

  • VSCode扩展,可通过实时浏览器重新加载来帮助您实时将SASS / SCSS文件编译/转换为CSS文件。

  • webpack 配置

npm install -D sass-loader node-sass style-loader css-loader

module: {
    rules: [
      {
        test: /\.scss$/,
        use: ['style-loader','css-loader','sass-loader'],
        exclude: /node_modules/
      }
    ]
}

1.3 输出格式

  • nested 格式

    选择器与属性等单独占用一行,缩进量与 Sass 文件中一致,每行的缩进量反映了其在嵌套规则内的层数。当阅读大型 CSS 文件时,这种样式可以很容易地分析文件的主要结构。

  • expanded 格式

    Expanded 输出更像是手写的样式,选择器、属性等各占用一行,属性根据选择器缩进,而选择器不做任何缩进。

  • compact 格式

    每条 CSS 规则只占一行,包含其下的所有属性。嵌套过的选择器在输出时没有空行,不嵌套的选择器会输出空白行作为分隔符。

  • compressed 格式

    Compressed 输出方式删除所有无意义的空格、空白行、以及注释,力求将文件体积压缩到最小,同时也会做出其他调整,比如会自动替换占用空间最小的颜色表达方式。

2 语法格式

2.1 语法格式

  • Sass 语法格式,被称为缩进格式 (Indented Sass) ,是一种简化格式;以严格的缩进式语法规则来书写,不带大括号({})和分号
  • SCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的强大功能;和我们的 CSS 语法书写方式非常类似。
  • 一般推荐使用scss,语法要求没那么严格

2.2 编码格式

一般使用使用 @charset声明编码格式,没有检测到,默认使用 UTF-8 编码。

2.3 注释

Sass 支持标准的 CSS 多行注释 /* */,以及单行注释 //,前者会 被完整输出到编译后的 CSS 文件中,而后者则不会

3 sass Script

3.1 变量

3.1.1 变量写法
  • 变量以美元符号开头
  • scss认为中划线和下划线是完全相等的
$primary : #DABE8D !default;

3.1.2 变量作用域
  • 局部变量:定义在选择器之内的变量,使用范围是该选择器与子选择器
  • 全局变量:定义在选择器之外的变量,子选择器中也定义了同名变量,则会覆盖全局变量
// 编译前
$width : 200px;
.block{
  $width: 100px;
  #{&}-item{
    width: $width;
  }
}
.block-other{
  width: $width;
}

//编译后 ( .variable采用嵌套作于域内的变量,.variable1使用的外层全局变量)
.block .block-item {
  width: 100px;
}
.block-other {
  width: 200px;
}
  • 局部变量转换为全局变量可以添加 !global
// 编译前
.block{
  $width: 100px !global;

  #{&}-item{
    width: $width;
  }
}
.block-other{
  width: $width;
}

// 编译后
.block .block-item {
  width: 100px;
}

.block-other {
  width: 100px;
}
3.1.3 变量定义,设置变量的默认值 !default

变量的结尾添加 !default可指定默认值,此时,如果变量已经被赋值,不会再被重新赋值,如果变量未被赋值,则会被赋予新的值。

  • 变量已赋值
// 编译前
$primary-dark : pink;
$primary-dark : red  !default;
.block{
  color: $primary-dark;
}

// 编译后 (变量值还是前面声明的值)
.block {
  color: pink;
}
  • 变量未被赋值
// 编译前
$primary-dark : null;
$primary-dark : red  !default;
.block{
  color: $primary-dark;
}
// 编译后  (变量值为后面新赋予的值)
.block {
  color: red;
}

3.2 数据类型

  • 数值(1, 2, 13, 10px)
  • 字符串,有引号字符串与无引号字符串(“foo”, ‘bar’, baz)
  • 颜色(blue, #04a3f9, rgba(255,0,0,0.5))
  • 布尔型(true, false)
  • 空值(null)
  • 数组 (list),用空格或逗号作分隔符(1.5em 1em 0 2em, Helvetica, Arial, sans-serif)
  • maps, 相当于 JavaScript 的 object,(key1: value1, key2: value2)

3.3 运算

注意 :

  • 加、减、乘、除都必须是同一单位下运算,不然会报错。
  • 减法左边不留空格,直接做拼接,为了避免相关问题,运算符的两边都预留空格
  • 多个值单位相同时,只需要为一个值提供单位即可。
  • 圆括号可以用来影响运算的顺序
  • #{} 可以避免 Sass 运行运算表达式,直接编译 CSS
3.3.1 数值运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值