本文讲述less的使用语法
- 关于注释
1.less的注释跟js一样,不会被编译。
2.有两种方法://这是单行注释; /*这是多行注释,也是css的注释*/
3.注意:如果使用css的注释,那么编译的时候,这个注释会被保留 定义变量
1foremample: @jdRed: rgb(201,21,35)定义宽度
1@minWdith:100px;定义图片的尺寸
1@imageSize: 100px 100px;
|
|
- 关于变量
注意:变量只能定义一次,本质就是常量。
|
|
- 关于混合(mixin)
首先定义一个class类
然后可以在其他的属性里面调用class类
注意: 这里的调用方法有两种
.a();
.a;
这两种方法效果是一样的。
- 编译的时候使相关的类不输出的办法
在定义的类或者选择器后面加上括号
例如:12345678910.my-mixin {color: black;}.my-other-mixin() {background: white;}.class {.my-mixin;.my-other-mixin;}
那么编译输出的结果是
- mixin 里面不仅可以放置属性也可以设置选择器
例如:12345678.my-hover-mixin() {&:hover {border: 1px solid red;}}button {.my-hover-mixin();}
编译结果:
关于这一块还没弄明白:我的理解,这里的命名空间要解决的就是命名的冲突,按照源文档的说法,这种混合是为了确保不与其他库冲突,把你要的混合写在了,一个id选择器里面,然后调用的时候,下面的几种方法都是可以的。
w3c 上面的解释:
它用于将mixins分组在通用名称下。 使用命名空间可以避免名称冲突,并从外部封装mixin组。
- 关于命名空间 namespaces
|
|
|
|
这里的>
是可选的。
受保护的命名空间
当guard应用于命名空间时,只有在guard条件返回true时才使用由命名空间定义的mixin。 命名空间防护类似于mixins上的guard。12345678910111213@import "//www.w3cschool.cn/less/lib.less";//导入的文件里面的代码//lib.less//@color: blue;//只有当when后面的语句返回true的时候,才执行#namespace when (@color = blue) {.mixin() {color: red;}}p{#namespace .mixin();}关于!important 关键字
方法同css。
- 关于带参数的混合mixin
|
|
调用的时候传参:用来添加私有化前缀很方便
关于既没有给定的默认参数,只有括号的情况之前,已经说明,是可以在编译的时候省略掉的。
关于混合的多个参数
参数可以使用逗号或分号分隔。 使用逗号符号,可以将其解释为mixin参数分隔符或css列表分隔符。 如果在mixin中使用分号,那么它将用分号分隔参数,CSS列表将包含所有逗号。- 如果你有两个参数,那么它们将包含逗号分隔的列表。 例如 .class1(1,2,3; sometext,other thing)。
- 如果有三个参数,并且只包含数字,例如 .class1(1,2,3)。
- 您可以使用带有逗号分隔列表的虚拟分号,例如 .class1(1,2,3;)。
- 有逗号分隔的默认值。 例如 .class1(@color:gray,green;)。
关于命名参数
Mixins通过使用它们的名称提供参数值而不是位置。 参数没有放置值的任何顺序,它们可以通过名称引用。 命名参数的结果更容易阅读,并提供清晰的代码。
- 传递所有参数
当调用mixin时, @arguments 包括所有传递的参数。 当不想使用单个参数时, @arguments 变量很有用。
|
|
LESS 高级参数和@rest Variable
- .mixin(…) { // matches 0-N arguments
- .mixin() { // matches exactly 0 arguments
- .mixin(@a: 1) { // matches 0-1 arguments
- .mixin(@a: 1; …) { // matches 0-N arguments
- .mixin(@a; …) { // matches 1-N arguments1234.mixin(@a; @rest...) {// @rest is bound to arguments after @a// @arguments is bound to all arguments}
参数的模式匹配
12345.mixin(@a; @color) { ... }.line {.mixin(@color-new; #888);}
可以使用 @ color-new 的不同值来使mixin的行为不同。
如果将 @ color-new 的值设置为dark,则它会以较暗的颜色显示结果,因为mixin定义与 dark 作为第一个参数匹配。
- 变量范围
变量范围指定可用变量的位置。 变量将从本地作用域搜索,如果它们不可用,则编译器将从父作用域搜索。12345678@var: @a;@a: 15px;.myclass {font-size: @var;@a:20px;color: green;}
输出:
- Mixin和返回值
|
|
是不是可以这样写:
- 使用@import 导入less文件
|
|
- less 选择器,url
选择器可以引用任何变量,它是在编译时构建的。变量名称必须放在用@符号前缀的花括号({})内。
|
|
变量可用于保存URL。
|
|
import语句可以具有保存路径的变量。当你引用一个普通的父目录时,这是非常有用的。
|
|
变量可以由属性引用。
|
|
- 变量名称
我们可以定义变量名称由一个值组成的变量。
|
|
- less 变量延迟加载
在延迟加载中,即使它们尚未声明,也可以使用变量。
|
|
以上代码是可以正常执行的。
关于延迟加载的范围
如果定义变量两次,将搜索并使用当前范围中变量的上一个定义。
12345678910 @var: 10;.myclass {@var: 50;.para1 {@var: 30;font-size: @var;@var: 20;}font-size : @var;}
输出:
- 关于扩展伪类:extend
|
|
编译结果:
|
|
编译结果:
我的理解:
添加扩展伪类,就是把扩展extend参数里面的选择器所有的属性添加到,前面的添加了extend的选择器里面。
- 需要注意的是extend放置的位置不一样,最终的编译结果也不一样
例如:
|
|
编译结果:
再来看看extend写在正文的使用&连接起来的编译效果
|
|
编译结果:
我们看到,他把container添加了.img里面的属性。
官方文档指明:
&:extend(selector) 语法可以放在规则集的正文中。 它是放置扩展到规则集的每个选择器的快捷方式。
但是文档的另一部份似乎出错了,先记录下来,看看有没有人纠错。
关于:extend()扩展编译w3c的一个错误例子
- extend扩展嵌套选择器
|
|
编译结果:
extend扩展完全匹配 我理解:严格匹配,包括属性选择器的单引号和双引号等。
默认情况下, extend 查找选择器之间的完全匹配。 对于具有相同含义的两个第n个表达式,扩展无关紧要,但它只寻找与为选择器匹配定义的相同的顺序形式。less中nth表达式的扩展
nth表达式的形式在扩展中很重要,否则它将选择器视为不同。 nth表达式1n + 2和n + 2是等效的,但扩展将该表达式视为不同。- extend扩展参数all
当最后在扩展参数中标识关键字 all 时,LESS将该选择器作为另一个选择器的一部分。 匹配的选择器部分将被extend替换,形成一个新的选择器。12345678910.style.nav,.nav h3 {color: orange;}.nav {&:hover {color: green;}}.container:extend(.nav all) {}
编译结果:
关于extend扩展的跟多内容请参考extend扩展
Less Mixin Guards
每个mixin将有一个或多个由逗号分隔的防护,并且guard必须括在括号中。 LESS使用Guards的mixins而不是if / else语句,并执行计算以指定匹配的mixin。123456789101112131415.mixin (@a) when (lightness(@a) >= 50%) {font-size: 14px;}.mixin (@a) when (lightness(@a) < 50%) {font-size: 16px;}.mixin (@a) {color: @a;}.class1 {.mixin(#FF0000)}.class2 {.mixin(#555)}LESS 类型检查函数
您可以使用类型检查内置函数来确定匹配混合宏的值类型。 为此,您可以使用 is 函数。 以下是可用功能的列表:
- iscolor
- isnumber
- isstring
- iskeyword
- isurl
这些都是基本的类型检查功能。 您可以使用以下函数检查值是否在特定单位中: - ispixel
- ispercentage
- isem
- isunit
|
|
未完待续…