预处理器less的使用
css预处理器:使用一种新的语言书写css代码,通过编译后生成普通css文件,我们所要做的就是安装预处理器以及学习使用它的语法,然后编译生成目标css文件。
css预处理器的优势是:提供了css复用机制,减少冗余代码,同时也提高了代码的可维护性,极大提升了css开发效率。
sass
和less
都是css预处理器。
less扩展了css语言,加入了变量、Mixin、函数等特性。
less可以运行在node或者浏览器。
安装使用
node引入:
安装
1 | $ npm install -g less |
编译
1 | # 编译 |
标签引入:
1 | <link rel="stylesheet/less" type="text/css" href="styles.less" /> |
less代码写在styles.less中,script标签引入less.js,可以使用国内静态资源库替换上面的。比如75cdn
:
1 | <link rel="stylesheet/less" type="text/css" href="styles.less" /> |
变量
变量书写形式:@var
,只能在作用域内有效,不可以重复定义变量:
1 | @cos_width: 10px; |
赋值:只要保持单位统一或可相互转换,就可以进行运算,包括颜色在内:
1 | @base: 5%; |
混入mixin
就是将一组属性从一个规则集混入到另一个规则集中。
比如,我们创造一组属性:
1 | /*源规则集*/ |
现在我们想要在其他地方使用这组属性,使用.bordered()
语句:
1 | // 目标规则集 |
嵌套
less嵌套和sass一样
普通css代码:
1 | #header { |
使用less写:
1 | #header { |
可以将伪元素选择器和混入以及嵌套一起用,比如这是一个.clearfix
:
1 | .clearfix { |
在元素中调用.clearfix
,注意:以上代码中的&
代表父元素(同sass)。
1 | div { |
@规则嵌套和冒泡
@
规则可以和选择器以相同的方式嵌套,@ 规则会被放在前面,同一规则集中的其它元素的相对顺序保持不变。这叫做冒泡。
1 | .component { |
计算
less可以使用加减乘除对数字颜色以及变量使用。算术运算符在使用的时候会进行单位换算,以最左侧类型为准,若无意义则忽略单位。
1 | @var1: 5cm + 10mm; //6cm |
对颜色计算:
1 | @color_base: #248 / 2; //#124 |
对于calc()
函数:less不会计算出来,会保留calc()
让css运算。
转义
比如给一个变量赋值min-width: 768px
Less3.5开始,无需转义,可以直接简写为:@min768: (min-width: 768px)
1 | @min768: (min-width: 768px); |
函数
less内置了一些函数用于转换颜色、处理字符串、运算。
注意:less不提供自定义函数!sass可以自定义函数!
1 | @base: #f04615; |
命名空间和访问符
有时,出于组织结构或仅仅是为了提供一些封装的目的,你希望对mixin进行分组。你可以用 less 更直观地实现这一需求。假设你希望将一些mixin和变量置于 #bundle
之下,为了以后方便重用或分发:
1 | #bundle() { |
现在,如果我们希望把 .button
类混合到 #header a
中,我们可以这样做:
1 | #header a { |
注意:如果不希望它们出现在输出的 CSS 中,例如 #bundle .tab
,请将 ()
附加到命名空间(例如 #bundle()
)后面。
映射maps
less3.5开始,可以将mixin和规则集作为一组值的映射使用:
1 | #colors() { |
作用域
1 | @var: red; |
1 | @var: red; |
以上代码只是第二层嵌套的@var
顺序不一致,但是header
中引用的都是white。故而变量随用随定义。
注释
第一种:/*注释*/
可以单行可以多行,在css文件中会被保留在原码中。
1 | /*注释*/ |
第二种://注释
单行注释,在less文件中,但是编译后的css文件中没有。
1 | //注释 |
import
1 | @import "style.less" //如果是.less文件,则扩展名可以省略 |