【发布时间】:2015-01-12 21:59:27
【问题描述】:
我正在使用Mindscape Web Workbench (pro) 从 LESS 文件中生成一些 CSS。我有两个名称相同但参数数量不同的 mixin。
根据LESS docs,应该根据调用中的参数数量自动选择正确的mixin。以下是文档中的相关部分:
我们也可以在 arity 上进行匹配,这里有一个例子:
.mixin (@a) { color: @a; } .mixin (@a, @b) { color: fade(@a, @b); }现在,如果我们使用单个参数调用 .mixin,我们将获得输出 第一个定义,但如果我们用两个参数调用它,我们将 得到第二个定义,即@a 淡化为@b。
然而,这对我来说似乎并非如此。
下面是.border-radius mixin 的两个版本。第一个接受一个参数,第二个允许发送一组自定义参数。 #searchbox 类调用单参数 mixin,#search 类调用多参数 mixin。
LESS Mixins
.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(参数的数量)。相反,使用单个参数调用似乎会运行 both 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;
}
我做错了什么?
【问题讨论】: