注意:添加此答案并不是为了说明现有答案不正确或已过时。所有答案都是有效的,并且仍然有效。这只是提供了一种不同的方法,在我看来,它更复杂一点,但在如何将每个参数称为键值对方面也更灵活。
使用此方法的优点:当需要对值执行任何额外操作(例如添加unit
as或执行任何额外数学运算等)或为也动态添加供应商前缀时deg
,此方法将变得更加有用。例如,有时您可能只想将输入属性作为输入属性传递给 mixin,但想为 the和为etc添加。px
@property
transform
-webkit-transform
-webkit-transition
-moz-transform
-moz-transition
在这个方法中,我们利用了...
允许我们向 mixin 传递可变数量的参数、循环传递extract
的每个参数、属性名称以及附加参数(如持续时间、旋转度等)的特性然后使用 Less 提供的合并功能来连接为属性指定的值。
- 用
+:
逗号连接属性值,并在 Less v1.5.0 中引入
- 用
+_:
空格连接属性值,并在 Less v1.7.0 中引入。
.transition(@args...){
.loop-args(@argCount) when (@argCount > 0) {
.loop-args(@argCount - 1);
@arg: extract(@args, @argCount);
@property: extract(@arg,1);
@duration: extract(@arg,2);
-webkit-transition+: @property @duration;
-moz-transition+: @property @duration;
-o-transition+: @property @duration;
transition+: @property @duration;
}
.loop-args(length(@args));
}
div{
.transition(background, 1s; border-color, 2s; color, 2s);
}
.transform(@args...){
.loop-args(@argCount) when (@argCount > 0) {
.loop-args(@argCount - 1);
@arg: extract(@args, @argCount);
@property: extract(@arg,1);
@param: extract(@arg,2);
-webkit-transform+_: ~"@{property}(@{param})";
-moz-transform+_: ~"@{property}(@{param})";
-o-transform+_: ~"@{property}(@{param})";
transform+_: ~"@{property}(@{param})";
}
.loop-args(length(@args));
}
div#div2{
.transform(rotate, 20deg; scale, 1.5; translateX, 10px);
}
编译后的上述代码将产生以下输出:
div {
-webkit-transition: background 1s, border-color 2s, color 2s;
-moz-transition: background 1s, border-color 2s, color 2s;
-o-transition: background 1s, border-color 2s, color 2s;
transition: background 1s, border-color 2s, color 2s;
}
div#div2 {
-webkit-transform: rotate(20deg) scale(1.5) translateX(10px);
-moz-transform: rotate(20deg) scale(1.5) translateX(10px);
-o-transform: rotate(20deg) scale(1.5) translateX(10px);
transform: rotate(20deg) scale(1.5) translateX(10px);
}
相关答案: