1、背景
CSS不是一种编程语言,可以用它开发网页样式,但是没法用它编程,它没有自己的变量、简单的逻辑程序、函数及其他编程语法,只是一行行单纯的属性描述,写起来相当费事,而且代码难以组织和维护。
为了加入一些编程元素,让CSS能像其他程序语言一样可以做一些预定的处理,CSS预处器应运而生。
2、CSS预处理器
CSS预处理器用一种专门的编程语言,进行样式设计,然后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题,使用变量、简单的逻辑程序、函数等在编程语言中的一些基本特性,让CSS 更加简洁、适应性更强、可读性更佳,更易于代码的维护。
3、CSS预处理器框架
使用最为普遍的三款CSS预处理器框架分别是 SASS、LESS和Stylus。
1) SASS:最早、最成熟的CSS预处理器,拥有Ruby社区的支持和compass这一最强大的CSS框架,目前受LESS影响,已经进化到了全面兼容CSS的SCSS。SASS使用.sass扩展名。
2) LESS:受SASS的影响较大,但又使用CSS的语法,更容易上手,在Ruby社区之外支持者远超过SASS,其缺点是比起SASS来,可编程功能不够,优点是简单和兼容CSS。LESS影响了SASS演变到SCSS,著名的Twitter Bootstrap就是采用LESS做底层语言的。LESS使用.less扩展名。
3) Stylus:来自Node.js社区,主要用来给Node项目进行CSS预处理,在Node.js社区内有一定支持者,但在广泛意义上人气还完全不如SASS和LESS。Stylus使用.styl扩展名。Stylus功能上更为强壮,和JavaScript联系更加紧密。
LESS是受SASS启发而开发的工具,为什么要开发SASS的替代品?
原因:语法。SASS支持老的缩进式的语法(不带花括号的语法),因此程序员需要学习一种新的语法;LESS能与CSS无缝地紧密结合在一起,能够让开发者从已有CSS文件平滑地过渡到LESS,而不需要像SASS那样将CSS文件转换成SASS格式。
5、CSS预处理器的编程特性
1) 变量
可以在CSS预处理器中声明变量,可以在整个样式单中任意引用该变量,支持任何类型的变量,如颜色、数值、文本。
① SASS的变量必须是$开始,然后变量名和值使用冒号隔开;
② LESS的变量必须是@开始;
③ Stylus对变量名没有任何限定,可以是$开始,也可以是任意字符,需要注意的是Stylus (0.22.4) 将会编译@开始的变量,但其对应的值并不会赋予该变量,换句话说,Stylus的变量名不要用@开头。
2) 嵌套
① 结构嵌套:所有后代元素的CSS样式单都可以放置在父元素的CSS样式单中。
② 属性嵌套:复合属性的CSS样式单可以拆开进行嵌套设置。
3) 混入
① 通过@mixin Mixins名(参数:参数值)的方式将相同的样式风格定义成一个模块,参数:参数值可选;
② 在需要使用的地方通过@include Mixins名(参数值)的方式将定义好的模块调用进来,参数值可选。
4) 继承
在写CSS时,若多个元素具有同样的样式,往往把多个元素相同的样式写在一起。
① 通过CSS预处理器,可以把相同的样式抽取出来,并为其定义为一个类,把相同的样式写在这个类中。
② 在需要使用的地方通过@extend来调用。
5) 导入
通过 @ import CSS文件名的方式可以导入CSS文件,效果跟普通的CSS导入一样,但需要注意:导入的CSS文件中定义的变量、混入等信息也将会被引入到主样式文件中,因此要避免它们互相冲突。
6) 函数
CSS 预处理器一般都会内置一些颜色处理函数用来对颜色值进行处理,如加亮lighten()、变暗darken()、改变色调adjust-hue()、增加饱和度saturate()、减少饱和度desaturate()、灰度转换greyscale()等。
7) 操作符
可以直接在CSS预处理器中进行样式的计算,其他编程语言的操作符基本都支持。