注释 //
// 这是less单行注释,注释中的内容不会被编译到css文件中/* 这是原版css注释,里面的内容会被编译到css文件中去 */
后代嵌入
.box1{height: 100px;width: 100px;.box2{border-radius: 50%;}}
编译后为
.box1{height: 100px;width: 100px;}.box1 .box2{border-radius: 50%;}
darken() 加深
body{background-color: darken(#bfa,10%);}
这个函数用于加深颜色
- 第一个参数是颜色
- 第二个参数是百分比
$样式名
使用$样式名可以直接引用其它属性的名
.box{height: 300+500px;width: 500 * 2px;width: 1600 / 40px;height: $width;}
计算
使用值时,可以直接计算
.box{height: 300+500px;width: 500 * 2px;}
@ 定义变量
@red:#f10000;@w:100px;@a:10px;.box{height: 300+500px;width: 500 * 2px;width: 1600 / 40px;height: $width;border-width: @a;}
@{变量名}
可以将变量的值作为选择器使用
@className:box2;.@{className}{width: 100px;}
引入变量方式
1、直接写
2、通过大括号引入
使用变量
使用变量时候依据就近原则
同样都在括号里面,后面把前面覆盖
@a:10px;@className:box2;.box{@a:20px;height: 300+500px;width: 500px;height: $width;border-width: @a;}
每一个{}都是一个独立作用域
@a:10px;.box{@a:20px;height: 300+500px;width: 500px;height: $width;border-width: @a;}.box1{width: @a;}
- 我们使用变量时,会先在当前的
{}中寻找 - 如果找到则直接使用,如果没有则去上一级的
{}中寻找 - 找到则使用,如果没有则继续去上一级寻找,直到找到为止
- 如果一直到最外层依然没有,则报错(无法编译)
mixins
通过mixins将不同类的样式进行混用
mixins的使用有两种方式
1、源码
.box1{height: 100px;width: 100px;}.box2{.box1()}
混用的样式只能用类选择器,不能用元素选择器
**
编译后
.box1{height: 100px;width: 100px;}.box2{height: 100px;width: 100px;}
2、:extend()
可以将其他的选择器上的样式,扩展到当前的选择器上
和mixins不同,mixins是将全部样式复制了一遍
extend()是通过选择器分组的形式对样式进行扩展
.box2:extend(.box1){font-size:14px;}
编译后为
.box1 .box2{width:100px;height:100px;}.box2{font-size:14px;}
.box2:extend(.box1 all){} ----------扩展box1相关的所有样式
定义mixins(传参)
定义mixins时候,如果在名字后边添加了()则mixins中的样式不会被编译到css文件中
.box1(){height: 100px;width: 100px;}.box2{.box1()}
编译后
.box2{height: 100px;width: 100px;}
而且在括号中可以定义参数
这个参数相当于定义了一个变量,但是并没有赋值
.hello(@a){width:@a;height: 100px;backgroud-color:red;}
使用mixins时,可以向括号中传值,我们所传的值会赋值给变量
.hello(@a,@b){width:@a;height: @b;backgroud-color:red;} ------------相当于定义了一个函数.wrapper{.hello(30px,50px)} ------------------相当于使用函数
形参/实参
定义函数的时候叫形参,形式参数,没有值
调用的时候交实参,实际参数
默认参数
可以在mixins中指定默认参数
.border(@bw:1px)
.border(@bw:1px){border:@bw red solid;}h1{.hello(300px,400px).border();}
传递参数时默认情况下必须按照顺序
传递实参时可以按照顺序或者参数名来传递
按照参数名传参那么顺序就不重要了
.hello(@b:30px,@a:50px);
& 外层选择器
.box1{width:100px;.box2{color:red;.box3{background-color:#bfa;}}}&{height:345px;}
ul{background-color:#bfa;& > li{float:left;}}
.box4:extend(ul){}.box4{&:extend(ul);}这两种写法是一样的
@import导入
用来导入,可将外部的less代码导入到目前的less中
可以分功能模块写好less,然后导入转css,这样降低了不同文件之间的耦合
