Less 是否有一种通用方法可以在更少的时间内添加供应商前缀?

Less 是否有一种通用方法可以在更少的时间内添加供应商前缀?,less,Less,我目前有一个mixin.less文件,其中几乎所有的mixin基本相同: .border-radius(@radius) { -webkit-border-radius: @radius; -khtml-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } .box-shadow(@value) { -webkit-box-shadow: @val

我目前有一个
mixin.less
文件,其中几乎所有的mixin基本相同:

.border-radius(@radius) {
  -webkit-border-radius: @radius;
   -khtml-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;
}

.box-shadow(@value) {
  -webkit-box-shadow: @value;
   -khtml-box-shadow: @value;
     -moz-box-shadow: @value;
          box-shadow: @value;
}
有没有一种方法可以创建某种通用的mixin,我可以这样称呼它:

.vendor('border-radius', '3px');
.vendor('box-shadox', '10px 10px');
哪一个会产生与上述相同的结果?

注意:

建议停止依赖该技术并考虑使用专用的前缀工具(例如,等等)。如今,通过CSS预处理器混合(Less、SCS或其他)对供应商前缀进行硬编码是一种纯粹的反模式,被认为是有害的。自动前缀工具将使您的代码干净、可读、经得起未来考验并且易于维护/自定义

例如,见:


原始答复: 目前LESS不支持“属性名插值”,所以不能在属性名中使用变量。然而,有一个黑客: 因此,如果您不介意输出CSS中的“虚拟”属性,那么我们开始:

.property\uuz(@property,@value){
_:~“;@{property}:@value;
}
.vendor(@property,@value){
.property_('-webkit-@{property}',@value);
.property_('-khtml-@{property}',@value);
.property_('-moz-@{property}',@value);
.property_(@property,@value);
}
#用法{
.供应商(边界半径,3px);
.供应商(盒子阴影,10px 10px);
}
输出:

#用法{
_:;-webkit边界半径:3px;
_:;-khtml边界半径:3px;
_:;-moz边界半径:3px;
_:;边界半径:3px;
_:;-webkit盒阴影:10px 10px;
_:;-khtml盒阴影:10px 10px;
_:;-moz盒阴影:10px 10px;
_:;长方体阴影:10px 10px;
}

更新: 1.6.0版引入的功能更少,因此现在您不再需要任何黑客攻击:

.vendor(@property,@value){
-webkit-@{property}:@value;
-khtml-@{property}:@值;
-moz-@{property}:@value;
@{property}:@value;
}
#用法{
.供应商(边界半径,3px);
.供应商(盒子阴影,10px 10px);
}

可能重复@Martin的确,很抱歉重复…感谢您的更新,很高兴知道现在已经可以了!行
@属性:@value将@value赋值给@property,从而中断。。。应该是
@{property}:@value
@Andreas Hultgren,是的,当然,我的错误-现在已修复。@seven Phase max供应商如何通过较少的反模式进行硬编码?@Andrew,因为您可以编写不带前缀和杂乱混合的普通代码,并通过专用工具自动为所有内容添加前缀。虽然通知上都写了。