【发布时间】:2014-04-21 00:29:30
【问题描述】:
我刚刚发现 less 中的变量是“延迟加载的”(如此处所述:http://lesscss.org/features/#variables-feature-lazy-loading),因为如果您设置一个变量,请使用它,然后将其设置为编译代码将使用的另一个值最后设定的值。
即
@w: 30%;
.myclass {
width: @w;
}
将编译为:
.myclass {
width: 50%
}
这同样适用于 mixins 吗?
即 会
.mycolor() {
color: red;
}
.myclss {
.mycolor()
}
.mycolor() {
color: blue;
}
编译成:(不偷懒)
.myclass {
color:red;
}
或(懒惰的):
.myclass {
color:blue;
}
【问题讨论】:
-
它们按顺序合并(遵循级联规则)。自己检查:lesstester.com
-
顺便说一句,我们这里的术语有些偏差......严格来说“延迟加载”并不一定意味着“覆盖”(“变量覆盖概念”本质上只是“最后定义获胜”原则)。 “延迟加载”通常意味着简单的“可以在定义之前使用”(尽管较少的“延迟加载”比这更深一些:注意 local
@a如何影响 lesscss 中第二个示例的本地范围内的全局@var值。 org/features/#variables-feature-lazy-loading)。换句话说,准确地说:“延迟加载”确实适用于 mixins,但“最后定义获胜”则不适用。 -
我认为说混入不是“合并”(也不是“延迟加载”)更准确,就像调用混入将评估并返回每个匹配的混入一样。这类似于 CSS 中的概念,在 HTML 中引用一个类将导入每个类的属性和值。因此,CSS 查找并应用每个匹配的类,Less 在这里对 mixins 执行相同的操作。