6.3 Less和mixin
Bootstrap
并不是直接提供CSS
源文件,CSS
源文件是通过编译Less
源码而来的。Less
是一种CSS
预处理语言,支持变量、mixin
、函数等功能。如果掌握了Less
的用法,Bootstrap
用户将可以直接使用Less
源码,从而使用Bootstrap
框架中包含的大量变量、mixin
。
6.3.1 Less简介
CSS
作为一门功能强大的样式单语言,用于为HTML
页面定义丰富多彩的样式,工作得一直非常好。虽然CSS
号称是一门语言,但CSS
并不具备编程语言的特征。
CSS缺陷
总体上,CSS
存在着如下缺陷。
CSS无法定义变量
比如在页面上有很多地方都希望使用#aaa
这个颜色,但在CSS
样式单文件中只能一直重复地书写这个颜色。如果有一天希望对整个网页风格进行调整,希望将#aaa
这个颜色改为#ccc
,开发者只能将原来所有出现#aaa
的地方手动修改为#ccc
,这一点非常不利于页面后期的升级和维护。
CSS无法执行计算
由于CSS
本身不支持变量,自然也就谈不上计算了。但在实际开发中确实非常需要计算。比如我们要定义一个普通的高度为25px,另外2个高度要以此为基准。例如如下代码:
1 | .a{height: 25px;} |
如果有一天客户要求将普通的高度改为20px,另外两个高度也随之变化,但你看上面的代码能实现吗?当然不行,开发者必须手动修改另外两个变量,这真的令人沮丧。多希望有如下语法啊:
1 | @normal-height 25px; |
CSS不支持命名空间嵌套
CSS
经常要通过子元素选择器或包含选择器来实现命名空间嵌套。例如如下CSS
样式:
1 | #container.a |
上面这个例子中所有样式都需要被id
为container
的元素包含才有效,编写该CSS
样式文件时你可能还意识不到问题。但如果在编写之后页面结构发生了改变,那就需要为所有CSS
样式添加包含元素,这就非常麻烦了。例如需要修改为如下代码:
1 | .a |
假如有几十个类似的CSS
样式定义,突然
要将它们全部放在id为container
的元素内才有效,此时可能就需要在每个CSS
选择器之前都增加container
,这也是非常痛苦的事情。
Less用来干什么
由于CSS
存在一些固有的缺陷,因此开发者为CSS
重新开发了”预处理语言”—Less
。这种语言通常可以支持变量
、计算
、命名空间嵌套
甚至流程控制
等功能。
使用Less编译得到最终的CSS
开发者使用这种”CSS
预处理语言”来编写源代码,然后使用特定的编译器对源代码进行处理,从而得到最终的CSS
文件—请记住:CSS
预处理语言完全可以支持变量、计算、命名空间嵌套甚至流程控制,因此CSS
预处理语言可以很好地弥补CSS
的缺陷。Less
是一种诞生于2009年的CSS
预处理语言,Less
增加了变量、运算符、mixin
、函数等功能,让CSS
更易维护。Less
既可在浏览器上运行(通过JS库实时编译),也可借助Node.js
或Rhino
在服务器端运算。