Less 是一门 CSS 预处理语言,为CSS赋予了动态语言的特征。它扩展了 CSS 语言,增加了变量、Mixin(混合)、嵌套、函数和运算等特性,使 CSS 更易维护和扩展。
#test.vue文件中
<style scoped lang='less' type='text/less'>
@import './test.less'
</style>
#test.less文件中
可以编写less代码,且能被webstrom和eslint识别。
.one {
background-color : red;
.two {
height: 30px;
widtgh: 30px;
}
}
.one {
background-color : red;
> .two {
height: 300px;
width: 300px;
}
}
.one {
+ div {
height: 300px;
width: 300px;
border: 1px solid #ddd;
}
}
.one {
~ div {
height: 300px;
width: 300px;
border: 1px solid #ddd;
}
}
串行的选择器,都可以用嵌套规则完成。但是有一种特殊情况: 当对元素的伪元素进行处理的时候,需要在嵌套内部调用 外部串行的选择器。 这是时候&符号能完成此工作。
.one {
.two:hover {
#此时的.three的选择器为: (.one .two:hover .three)
.three {
}
}
.four: {
#此时的选择器为 ( .one .four:hover )
&:hover {
}
#此时的选择器为 ( .one .four .five )
.five {
}
}
}
less允许使用@符号来声明一个变量。比如
@pink : pink
@backgroundColor : '#ff0000'
@backgroundColor : red
div {
background-color: @backgroundColor;
}
#当做属性名使用的方式,eslint编译不过去。另外这种方式也不推荐使用。
@backgroundColor : background-color;
div {
@{backgroundColor} : '#ff0000';
width: 300px;
heigght: 300px;
}
#当做选择器名字使用的方式,eslint编译不过去。另外这种方式也不推荐使用。
@wrap : div;
@{wrap} {
@{backgroundColor} : '#ff0000';
width: 300px;
heigght: 300px;
}
@urlaaa : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1580205981432&di=230ef3c27a57c125dc2b618bc7e76547&imgtype=0&src=http%3A%2F%2F00.minipic.eastday.com%2F20170426%2F20170426145543_d286b1d11013bff1d01c48c2a30b9586_10.jpeg";
@backgroundColor : red;
.two {
width: 200px;
height: 200px;
background: url(@urlaaa)
}
#div实际显示得颜色#00ff00;
@backgroundColor : #ff0000;
div {
background-color : @backgroundColor;
width: 300px;
height: 200px;
@backgroundColor : #00ff00;
}
less支持常量,变量的加减乘除。
@width: 300px;
@height: 200px;
.one {
width: @width;
height: @height;
border: 1px solid #ddd;
}
.two {
width: @width/2;
height: @height/2;
border: 1px solid red;
}
混合就是将一系列属性从一个规则集引入到另一个规则集合。
#定义普通混合
.background [
width:200px;
height:200px;
background-color:red;
}
#使用混合
#.one是选择器。在.one内使用混合(.bacnkground)
.one {
.background
}
.background() {
width:200px;
height: 200px;
background-color: blue;
}
.one {
.background
}
.background(@width, @height, @backgroundColor){
width : @width;
height : 300px;
background-color: @backgroundColor;
}
.one {
.background(300px,200px, yellow);
}
.background(@width:200px, @height:300px, @backgroundColor:red){
width : @width;
height : 300px;
background-color: @backgroundColor;
}
.one {
.background(300px);
}
.background(@width:200px, @height:300px, @backgroundColor:red){
width : @width;
height : @height;
background-color: @backgroundColor;
}
#@height: 100px 通过指定参数的名字,来进行对应的参数赋值。
.one {
.background(@height:100px);
}
#第一个参数 @_ 表示匹配任意的标识符。
.angle( @_, @color ){
border-width: 100px;
border-style: solid;
}
#第一个参数是标志符,用于模式匹配。
.angle( T, @color ) {
border-color: @color transparent transparent transparent ;
}
#第一个参数是标志符,用于模式匹配。
.angle( R, @color ) {
border-color: transparent @color transparent transparent ;
}
#第一个参数是标志符,用于模式匹配。
.angle( B, @color ) {
border-color: transparent transparent @color transparent ;
}
#第一个参数是标志符,用于模式匹配。
.angle( L, @color ) {
border-color: transparent transparent transparent @color;
}
.one {
#第一个参数指定标识符,用于匹配多个同名的混合中的某一个。
#如果存在标识符为@_的模式,表示总会匹配这个模式,其他模式也能继续匹配。
.angle(R, yellow );
}
#@arguments表示接收到的所有参数。
.test(@1, @2, @3){
border : @arguments;
}
.one {
width:200px;
height:200px;
.test(1px, solid, red);
}
less使用:extend( xxx )方式来继承
.test {
width : 200px;
height : 200px;
}
div:extend( .test ){
border: 1px solid #ddd
}
less使用:extend( xxx all )方式来继承xxx,以及xxx的伪类
.test {
width: 200px;
height: 200px;
}
.test:hover {
border: 1px solid red;
}
div:extend( .test all ){
border : 1px solid #ddd
}