LESS
和 SCSS
都属于 CSS 预处理器的范畴,也就是 CSS 的超集,但是两者的语法、如何使用和具体的功能实现还是有差异的。
声明和使用变量
LESS 采用
@
符号,SCSS 采用$
符号。
在下面的示例中,我们首先在规则外声明了一个名为 link-color 的变量,然后在名为 #main
的规则内声明一个名为 width
的变量,接着把 width
变量赋值给了 CSS 的 width
属性。
LESS:
|
SCSS:
|
变量插值(Variable Interpolation)
LESS 采用
@{xxxx}
的形式,SCSS 采用#{xxxx}
的形式。
LESS:
|
SCSS:
|
Mixins 的定义、使用及参数
定义方法
定义一个 Mixin:LESS 使用 dot
符号(也就是句点)来定义一个 Mixin,并且可以把任意的 CSS 规则作为 Mixin 使用;SCSS 使用 @mixin
指令来定义一个 Mixin。
示例 - 来自 BootStrap 的 alert-variant Mixin 的定义
LESS:
|
SCSS:
|
使用
使用 Mixin:LESS 仍是使用 dot
符号(句点),如果 Mixin 没有参数的话可以省略后面的圆括号;SCSS 使用 @include
指令来引入一个 Mixin。
示例 - 引入一个名为 center-block 的 Mixin。
LESS:
|
SCSS:
|
参数形式
如果存在多个参数的话,LESS 使用分号分隔;SCSS 使用逗号分隔。两者都支持为参数设置默认值。
示例 - 来在 BootStrap 的 form-control-validation Mixin 的使用
LESS:
|
SCSS:
|
函数的使用
字符串函数
LESS 使用 e 或者 ~"xxxx"
这种语法进行 CSS 转义;SCSS 本身并没有提供 CSS 转义的函数,要达到相同的效果可以使用变量插值(Variable Interpolation)实现。
LESS:
|
SCSS:
|
颜色函数
调节色相,LESS 使用名为 spin()
的函数;SCSS 使用名为 adjust_hue()
的函数。
LESS:
|
SCSS:
|
数学函数
LESS 提供了一些 SCSS 中并不具备的数学函数,在 SCSS 中只能通过自定义函数实现,然后通过 node-sass 的接口传递给编译器。
SCSS:
|
上述 Math 实现所需的 JS 文件:
|
有关函数的区别还有:
LESS 的 fade()
函数在 SCSS 中只能使用 rgba()
之类的实现,因为 SCSS 也没有这个函数。
@import 的实现
像
@media
,@import
这些带 @ 符号的在 CSS 中都称为 At-rules。
值的一提的是 LESS 和 SCSS 对 @import
实现的区别。
LESS
- 如果扩展名为
.css
,将文件识别为 CSS 文件 - 其他任何扩展名都将被作为 LESS 文件处理
- 没有扩展名会被附加一个
.less
的扩展名并且作为 LESS 文件处理
SCSS
- 默认情况下,SCSS 的 @import 实现会试图寻找一个 Sass 文件进行导入。
- 但是在下列情况出现时,@import 会直接被编译为 CSS 的 @import at-rule
- 文件扩展名是
.css
- 文件扩展名是
- 文件以
http://
开头
- 文件以
- 文件名是一个
url()
- 文件名是一个
@import
具有媒体查询
- SCSS 按约定认为下划线开始的文件是内联文件,不会被编译为单独的 CSS 文件输出。
示例
LESS:
|
SCSS:
|
都会导入 foo.scss 文件。
其他区别
LESS 和 SCSS 均使用
&
符号表示父选择器引用,但是 SCSS 的&
符号只能出现在一个组合选择器的开始位置,LESS 则没有这个限制。
示例
LESS:
|
SCSS:
|
SCSS 不支持 LESS 中的
CSS Guard
功能,比如if, when ...
,在 SCSS 中需要换种方式实现。
LESS 示例:
|
Note:SCSS 需要换一种写法实现同样的功能。
SCSS 支持 !default,一般是用在基础 Rule 的声明中,告诉使用者这是可以被覆盖的。
SCSS 示例:
|
SCSS支持
if, else, for, each
等方法, LESS不支持
SCSS:
|
SCSS 不像 LESS 一样默认可以把 rule 作为 Mixin 使用,但是 SCSS 有类似的
@extend
指令;而 LESS 的 extend 语法看起来则像是伪类一样。
示例:
LESS:
|
SCSS:
|
集成 JavaScript 功能的方式:LESS 使用 @functions 指令,可以把 js 代码直接放到 ~ xxx
中间即可;SCSS 可以把 JS 代码放到一个单独的文件中,然后使用 node-sass编译的时候指定参数传给 node-sass。
LESS 示例:ant-design/ant-design
SCSS 示例:
命令
|
- LESS 支持 lazy evaluation,但是 SCSS 不支持,所以在 LESS 中可以先使用再定义,但是在 SCSS 中一定要先定义再使用。
- SCSS 是不支持 Mixin 重载的, 也就是说 LESS 可以有同名但是参数个数不同的几个 Mixins, SCSS 同样名字的 Mixin 只能有一个.
参考
less和sass或者scss 有什么区别吗?
LESS官网
SASS官网
- 本文作者: luckyship
- 本文链接: https://luckyship.github.io/2021/04/06/2021-04-06-difference-sass-and-less/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!