概述
Less
(Leaner Style Sheets 的缩写) 是一门向后兼容的CSS
扩展语言。
Less
增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展
Less
既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。
变量(Variables)
LESS 中的变量为完全的 ‘常量’ ,所以只能定义一次
使用 “@” 来申明一个变量:@color:red;
1、作为普通属性值只来使用:直接使用@color
//less
@nice-blue: #5B83AD;
@light-blue: @nice-blue + #111;
#header { color: @light-blue; }
编译为:
//css
#header { color: #6c94be; }
2、作为选择器和属性名:@{selector的值}的形式
//less
@selector:#wrap;
@w:width;
@{selector}{
@{w}:100px;
height: 300px;
border: 1px solid;
}
编译为:
//css
#wrap{
width:100px;
height:300px;
border:1px solid;
}
3、作为URL:@{url}
@images: "../img";
body {
color: #444;
background: url("@{images}/white-sand.png");
}
4、可变变量 (Variable Variables)
在less中,可以使用另一个变量定义变量的名称。
@primary: green;
@secondary: blue;
.section {
@color: primary;
.element {
color: @@color;
}
}
编译后
.section .element {
color: green;
}
5、变量延迟加载
@var: 0;
.class {
@var: 1;
.brass {
@var: 2;
three: @var; //3
@var: 3;
}
one: @var; //1
}
编译后:
.class {
one: 1;
}
.class .brass {
three: 3;
}
6、属性作为变量
#test{
color:red;
.inner{
background-color: $color;
}
color:yellow;
}
编译后:
#test {
color: red;
color: yellow;
}
#test .inner {
background-color: yellow;
}
混合(Mixins)
1、混合使用类选择器和ID选择器
.a, #b {
color: red;
}
.mixin-class {
.a();
}
.mixin-id {
#b();
}
编译后:
.a, #b {
color: red;
}
.mixin-class {
color: red;
}
.mixin-id {
color: red;
}
2、如果您希望创建一个mixin,但不希望该mixin出现在CSS输出中,请在mixin定义后面加上括号。
.my-mixin {
color: black;
}
.my-other-mixin() {
background: white;
}
.class {
.my-mixin();
.my-other-mixin();
}
编译后:
.my-mixin {
color: black;
}
.class {
color: black;
background: white;
}
嵌套(Nesting)
less提供了使用嵌套代替层叠或与层叠结合使用的能力。
#header {
color: black;
.navigation {
font-size: 12px;
}
.logo {
width: 300px;
}
}
结果代码更加简洁,并且模仿了HTML的结构。
也可以使用此方法将伪选择器与混合函数捆绑在一起。(&表示当前选择器父级):
.clearfix {
display: block;
zoom: 1;
&:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
}
运算(Operations)
// numbers are converted into the same units
@conversion-1: 5cm + 10mm; // result is 6cm
@conversion-2: 2 - 3cm - 5mm; // result is -1.5cm
// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // result is 4px
// example with variables
@base: 5%;
@filler: @base * 2; // result is 10%
@other: @base + @filler; // result is 15%
乘法和除法不转换数字。它在大多数情况下都没有意义——一个长度乘以一个长度就得到一个区域,而CSS不支持指定区域。less将按数字的原样操作,并将显式指定的单位类型分配给结果。
@base: 2cm * 3mm; // result is 6cm
您还可以对颜色进行算术运算:
@color: #224488 / 2; //results in #112244
background-color: #112244 + #111; // result is #223355
函数(Functions)
Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。这些函数在函数手册中有详细介绍。
函数的用法非常简单。下面这个例子将介绍如何利用 percentage 函数将 0.5 转换为 50%,将颜色饱和度增加 5%,以及颜色亮度降低 25% 并且色相值增加 8 等用法:
@base: #f04615;
@width: 0.5;
.class {
width: percentage(@width); // returns `50%`
color: saturate(@base, 5%);
background-color: spin(lighten(@base, 25%), 8);
}
Maps
#colors() {
primary: blue;
secondary: green;
}
.button {
color: #colors[primary];
border: 1px solid #colors[secondary];
}
编译后:
.button {
color: blue;
border: 1px solid green;
}
作用域(Scope)
less中的作用域与css中的作用域非常相似。首先在本地查找变量和混合函数,如果找不到它们,则从“父”范围继承。
@var: red;
#page {
@var: white;
#header {
color: @var; // white
}
}
与CSS自定义属性一样,mixin和变量定义不必放在引用它们的行之前。因此下面的代码与前面的示例相同:
@var: red;
#page {
#header {
color: @var; // white
}
@var: white;
}
注释(Comments)
块注释和行注释都可以使用:
/* 一个块注释
* style comment! */
@var: red;
// 这一行被注释掉了!
@var: white;
导入(Importing)
“导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉:
@import "library"; // library.less
@import "typo.css";