我正在使用Mindscape Web Workbench (pro) 从 LESS 文件中生成一些 CSS。我有两个名称相同但参数数量不同的 mixin。
根据LESS 文档,应根据调用中的参数数量自动选择正确的 mixin。这是文档中的相关部分:
我们也可以在 arity 上进行匹配,这里有一个例子:
.mixin (@a) { color: @a; } .mixin (@a, @b) { color: fade(@a, @b); }
现在如果我们用一个参数调用 .mixin,我们将得到第一个定义的输出,但是如果我们用两个参数调用它,我们将得到第二个定义,即 @a 淡化为 @b。
然而,这对我来说似乎并非如此。
下面是.border-radius
mixin 的两个版本。第一个接受一个参数,第二个允许发送一组自定义参数。该类#searchbox
调用单参数混合,该类#search
调用多参数混合。
更少的混合
.border-radius (@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.border-radius (@topleft: 5px, @topright: 5px, @bottomleft: 5px, @bottomright: 5px) {
-webkit-border-radius: @topleft @topright @bottomright @bottomleft;
-moz-border-radius: @topleft @topright @bottomright @bottomleft;
border-radius: @topleft @topright @bottomright @bottomleft;
}
#searchbox {
.border-radius(1px);
}
#search {
.border-radius(2px, 3px, 4px, 5px);
}
生成的 CSS 不尊重Arity (参数的数量)。相反,使用单个参数调用似乎会同时运行两个mixin,而使用多个参数调用会单独运行正确的 mixin,如下面生成的 CSS 所示:
生成的 CSS
#searchbox {
-webkit-border-radius: 1px;
-moz-border-radius: 1px;
border-radius: 1px;
-webkit-border-radius: 1px 5px 5px 5px;
-moz-border-radius: 1px 5px 5px 5px;
border-radius: 1px 5px 5px 5px;
}
#search {
-webkit-border-radius: 2px 3px 5px 4px;
-moz-border-radius: 2px 3px 5px 4px;
border-radius: 2px 3px 5px 4px;
}
我究竟做错了什么?