CSS(Cascading Style Sheet)是网页设计中最常用的语言,用于给HTML页面添加样式。CSS主要关注于如何描述样式,在可编程性上有一些缺失,导致产生了许多的CSS预处理器,用来给CSS增加可编程性和灵活度。SASS是这些可CSS预处理器之中的佼佼者。

SASS最大的竞争对手是LESS。SASS早于LESS诞生,但目前两者在功能上接近。主要的区别是SASS是用Ruby语言编写的,而LESS是基于Javascript。LESS的这个特性使得LESS可以直接在浏览器中使用,这可以说是LESS比较吸引人的地方。SASS也有自己的杀手锏,虽然SASS是基于Ruby的,但是SASS提供了一个C语言实现的LIBSASS,可以和任何其他语言绑定。使用C语言实现的LIBSASS运行非常快,在大型项目中特别实用。

Twitter的Bootstrap 3使用的是LESS,在Bootstrap 4的Beta公告提到了Bootstrap 4改用SASS了,使编译速度飞速提升。

SASS的源文件有两种,一种是以SASS为后缀的老格式,另一种是SCSS结尾的新格式。如果没有特殊原因,就选用SCSS格式吧。SCSS是Sassy CSS的简写,它完全兼容CSS的语法,下面是一个例子:

$font-size: 16px;

div {
    font-size: $font-size;
}

上面的例子声明了一个变量$font-size,这个变量在div的样式中被使用。除了变量以外还有若干可编程特性,可以参考An Introduction to CSS Pre-Processors: SASS, LESS and Stylus

LIBSASS

前面说了,如果想要更快速变异SCSS文件,就得使用LIBASS。但LIBASS只是一个库,并不能直接使用。好在它有很多编程语言的包装,比如基于C语言的SassC,还有基于Go语言的wellington

以Wellington为例子,使用Go语言的get命令安装:

go get github.com/wellington/wellington/wt

假设当前目录下有一个名字叫style.scss的文件,执行下面命令:

wt -b . watch .

可以自动生成style.css以及style.css.map(如果在浏览器中调试style.css的时候,会用到相应的map文件)。

关于import其他css文件

import是CSS的一个关键字,可以把其他CSS文件包含到当前CSS文件中。同样SASS支持@import关键字,可以把其他SASS文件包含到当前文件。假设要吧_partial.scss包含到style.scss,只需要在SASS中写:

@import 'partial';

注意,import的时候既不需要前面的下划线,也不需要后缀名.scss。

SASS中可以直接包含另一个CSS文件。如果有一个CSS文件,名字叫base.css,要把它包含到style.scss,可以这么写:

@import 'base.css';

生成相应的CSS文件时会变成:

@import url(base.css);

但是,现在有一个问题,能不能把CSS文件当成SCSS文件包含呢。答案是可以的,因为SCSS格式其实等于CSS格式加上一些增强的特性。如果不使用这些增强的特性,那么SCSS文件等同于一个CSS文件。所以,把base.css当成一个SCSS文件包含到style.scss中,你需要这么做:

@import 'base';

其实就是吧.css这个后缀去掉而已。

基于Ruby的SASS会报错,但是基于LIBSASS的wellington是认可这种语法的,可能是这个特性只在LIBSASS中支持吧。

(完)