CSS预处理器-Less

215 阅读4分钟
1) 普通变量
less 以@开头定义变量,并且使用时直接键入@名称。注意:作为属性值的变量不能添加大括号
2) 选择器变量
让选择器变成一个动态的
作为选择器的变量在使用的时候需要添加大括号({}),变量的前面可以添加选择操作符
3) 属性变量
属性变量使用的时候也需要添加大括号({})。
4) Url变量
变量名 必须使用大括号包裹
5) 申明变量
定义:@name:{ Key:value; Key:value; }
使用:@name{};
6) 变量运算
规则:
加减法时,以第一个数据的单位为基准。
乘除法时,注意单位一定要统一。
7) 变量的作用域
就近原则,不是指代码的位置,而是指代码的层级结构。
如果是同一级后面的生效,类似于提升。
不同级的变量,距离最近的生效。距离是指定义时的位置。
8) 用变量的定义变量
解析的顺序是从后向前逐层解析。


1) &符号,表示的是上1级选择器的名字。
2) 嵌套覆盖原有样式
3.媒体查询
/* Less */ #main{ //something... @media screen{ @media (max-width:768px){ width:100px; } } @media tv { width:2000px; } } /* 生成的 CSS */ @media screen and (max-width:768px){ #main{ width:100px; } } @media tv{ #main{ width:2000px; } } /* 生成的 CSS */ @media screen and (max-width:768px){ #main{ width:100px; } } @media tv{ #main{ width:2000px; } }

4.混合方法
1) 无参数方法 方法如声明的集合,使用值直接键入名称即可。
要点:“.”与“#”都可以作为方法前缀。可以不适用小括号,但是为了避免css格式混淆,建议加上小括号“()”。
2) 具体参数方法
.setSize(@width_size,@height_size){ width:@width_size; height:@height_size; }
3) 默认参数方法
Less 可以使用默认参数,如果没有传参数,那么将使用默认参数。 @arguments 犹如 JS 中的 arguments 指代的是全部参数。 传的参数中 必须带着单位。
4) 不定参
不确定参数的个数
.boxShadow(...){ box-shadow: @arguments; } .textShadow(@a,...){ text-shadow: @arguments; } #main{ .boxShadow(1px,4px,30px,red); .textShadow(1px,4px,30px,red); } /* 生成后的 CSS */ #main{ box-shadow: 1px 4px 30px red; text-shadow: 1px 4px 30px red; }
5) 方法的匹配模式
类似于多态。有点类似于switch case
同一个方法名的多个方法,由于传入的参数不同而实现不同的功能。

6) 方法的命名空间
有一个嵌套关系
7) 条件语句
Less没有if / else 但是less具有一个when,and,not与“,”语法。
#card{ // and 运算符 ,相当于 与运算 &&,必须条件全部符合才会执行 .border(@width,@color,@style) when (@width>100px) and(@color=#999){ border:@style @color @width; } // not 运算符,相当于 非运算 !,条件为 不符合才会执行 .background(@color) when not (@color>=#222){ background:@color; } // , 逗号分隔符:相当于 或运算 ||,只要有一个符合条件就会执行 .font(@size:20px) when (@size>50px) , (@size<100px){ font-size: @size; } } #main{ #card>.border(200px,#999,solid); #card .background(#111); #card > .font(40px); }

8) 条件运算符
比较运算有:> >= = =< <
=代表是等于
除去关键字true以外的值其他都会被默认为fales
9) 循环语法
Less并没有提供一个for等循环的方法但是可以使用递归的方法实现。
.generate-columns(4); .generate-columns(@n, @i: 1) when (@i =< @n) { .column-@{i} { width: (@i * 100% / @n); } .generate-columns(@n, (@i + 1)); }

10) 方法中的important
方法使用了important,相当于这个方法中的每一个属性都设置了一遍important,不允许覆盖
.border{ border: solid 1px red; margin: 50px; } #main{ .border() !important; } /* 生成后的 CSS */ #main { border: solid 1px red !important; margin: 50px !important; }
5.Less注释
Less的注释语法类似于js
//单行注释
/* ---*/多行注释
6.属性的拼接语法
+代表的是逗号,+_代表的是空格。
7. 继承(扩展)
extend是less的一个伪类。它可以继承所匹配声明中的全部样式。
1) all全局搜索替换
#main{ width: 200px; } #main { &:after { content:"Less is good!"; } } #wrap:extend(#main all) {} /* 生成的 CSS */ #main,#wrap{ width: 200px; } #main:after, #wrap:after { content: "Less is good!"; }
2) 扩展的注意事项
选择器和扩展之间 是允许有空格的:pre:hover :extend(div pre).
可以有多个扩展: pre:hover:extend(div pre):extend(.bucket tr) - 注意这 与 pre:hover:extend(div pre, .bucket tr)一样。
扩展必须在最后 : pre:hover:extend(div pre).nth-child(odd)。 如果一个规则集包含多个选择器,所有选择器都可以使用extend关键字。

8. 导入
在less文件中可以引入其他的less文件。使用关键字import。
① 导入less文件,可以省略后缀。
② @import可以放在任何地方
③ reference 引入一个less文件,但不会编译它
④ once 表明相同的文件只会被导入一次
⑤ multiple 使用@import (multiple)允许导入多个同名文件。

9. 避免编译
#main{ width:~'calc(300px-30px)'; } /* 生成后的 CSS */ #main{ width:calc(300px-30px); }
10. less中可以使用js
less本身是使用js实现的,所以在less中可以使用js。
Js的代码写在字符串模板里。