如何使用SASS

1.背景介绍

1.1什么是Sass

Sass 是一款强化 CSS 的辅助工具,是预编译器。它在 CSS 语法的基础上增加了变量、嵌套、混合、导入等高级功能。

1.2诞生背景

CSS不是一个完美的语言。CSS简单易学,却也能迅速制造严重的混淆,尤其是在工程浩大的项目中。这就是 Sass 出现的契机,作为一种元语言,通过提供额外的功能和工具可以改善 CSS 的语法。同时,保留了 CSS 的原有特性。Sass 存在的关键不是将 CSS 变成一种全功能编程语言,它只是想修复缺陷。Sass 只在 CSS 的基础上添加了几个额外功能。

2.知识剖析

常用的Sass功能介绍

2.1 SassScript

在 CSS 属性的基础上 Sass 提供了一些名为 SassScript 的新功能。 SassScript 可作用于任何属性,允许属性使用变量、算数运算等额外功能。

2.1.1 变量 $

变量以美元符号$开头,赋值方法与 CSS 属性的写法一样

示例:

首先声明变量,为$blue赋值#5fc0cd,然后在background-color中引用变量,这样背景颜色就变成变量声明的颜色了。

全局变量,局部变量

变量支持块级作用域,嵌套规则内定义的变量只能在嵌套规则内使用(局部变量),不在嵌套规则内定义的变量则可在任何地方使用(全局变量)。将局部变量转换为全局变量可以添加 !global 声明。

示例:

全局变量:任何地方都可使用

局部变量:只能在嵌套规则内使用

注意:当全局变量遇上局部变量,局部变量覆盖全局变量

全局变量中的颜色为蓝色,局部变量中的颜色为黑色,黑色覆盖蓝色,最后的背景颜色呈现为黑色

2.1.2  数字运算

SassScript 支持数字的加减乘除、取整等运算 (+, -, *, /, %)

加法 +

 乘法 *

注意乘的数不能带单位

 除法 /

/ 在 CSS 中有分隔数字的用途,SassScript作为 CSS 语言的拓展也支持这个功能,同时也赋予了 / 除法运算的功能。

分隔数字:

 除法运算:

以下三种情况 / 将被视为除法运算符号:

(1)如果值,或值的一部分,是变量或者函数的返回值

(2)如果值被圆括号包裹

(3)如果值是算数表达式的一部分

2.2  嵌套

2.2.1  嵌套规则

Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器。它可以避免重复书写父选择器,使结构更加清晰明了,样式的可读性更高。

2.2.2  父选择器 &

嵌套应用于 :hover 的伪类时则不能简单地用嵌套了,这时候就需要使用父选择器&。父选择器 & 可以简单地理解为用 & 来表示父标签。

2.2.3  属性嵌套

有些 CSS 属性遵循相同的命名空间,比如background-color, background-image, background-size 都以 background 作为属性的命名空间。为了便于管理这样的属性,同时也为了避免了重复输入,Sass 允许将属性嵌套在命名空间中。

 

2.3  混合器

@mixin 混合器可以包含选择器和选择器中的属性,通过 @include 来传参,这样就可以非常方便的复用需要常用的样式了。

 

Flex垂直居中的调用

2.4 选择器继承

选择器继承是说一个选择器可以继承另一个选择器定义的所有样式。这个通过@extend语法实现

如果页面的header和footer的样式有共同之处,便可以在footer 使用 @extend来继承 header 的样式,免去重复书写。

 

 

3.常见问题

有些观点认为不要使用选择器嵌套比较好,其中原因有:

1.增加编译难度,编译生成的css文件父类过多

2.使得最终代码难以阅读,选择器越具体会使得声明语句越冗长

3.混淆选择器路径和探索下一级选择器的错误率很高

4.解决方案

我觉得过量使用选择器嵌套确实是不太好的,但是只要使用合理在结构或是代码易读性上都还是有很大帮助的。

使用一致的类命名空间来命名我觉得是个不错的解决办法,一致的类命名既使代码易读,也不会混淆选择器路径。

比如,使用myapp-Header-link 来当做一个类名,组成它的三个部分都有着特定的功能:

1.myapp 首先用来将我们的应用和其他可能运行在同一个 DOM 上的应用隔离开来

2.Header 用来将组件和应用里其他的组件隔离开来

3.link 用来为局部样式效果保存一个局部名称

这样第一个标签类名可以写成myapp,myapp下的头部组件则可以写成myapp-Header,Header下的链接元素则可以写成myapp-Header-link。当使用选择器嵌套的时候,配合使用父选择器&,这样各个部分的结构就很清晰明了,不会混淆。

5.编码实战 

6.扩展思考

Less与Sass的差异

1.编译环境不同,Less是基于JavaScript运行,所以Less是在客户端处理。Sass是基于Ruby的,是在服务器端处理的。

2.变量符不一样,Less是@,而Scss是$,而且变量的作用域也不一样。

3.输出设置,Less没有输出设置,Sass提供4中输出选项:nested, compact, compressed 和 expanded。

4.Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持。

5.Sass和Less的工具库不同,Sass有工具库Compass, Less有UI组件 Bootstrap

  

7.参考文献

Sass中文网

https://www.sass.hk/

Sass中文网2

https://www.sasscss.com/

一个健壮且可扩展的 CSS 架构所需的8个简单规则

https://llp0574.github.io/2016/11/17/css-architecture/#3-use-consistent-class-namespacing

Less与Sass 的区别

http://www.cnblogs.com/wangpenghui522/p/5467560.html

猜你喜欢

转载自www.cnblogs.com/xzybk/p/12794185.html