注意:
建议停止依赖这种技术并考虑使用专用的前缀工具(例如Autoprefixer、-prefix-free 等)。如今,通过 CSS 预处理器 mixins(Less、SCSS 或其他)对供应商前缀进行硬编码是一种纯粹的反模式,并且被认为是有害的。自动前缀工具将使您的代码干净、易读、面向未来且易于维护/定制。
例如:less-plugin-autoprefix
原答案:
嗯,目前 LESS 不支持“属性名称插值”,因此您不能在属性名称中使用变量。但是有一个技巧:How to pass a property name as an argument to a mixin in less
因此,如果您不介意输出 CSS 中的“虚拟”属性,那么我们开始吧:
.property_(@property, @value) {
_: ~"; @{property}:" @value;
}
.vendor(@property, @value) {
.property_('-webkit-@{property}', @value);
.property_( '-khtml-@{property}', @value);
.property_( '-moz-@{property}', @value);
.property_( @property, @value);
}
#usage {
.vendor(border-radius, 3px);
.vendor(box-shadow, 10px 10px);
}
输出:
#usage {
_: ; -webkit-border-radius: 3px;
_: ; -khtml-border-radius: 3px;
_: ; -moz-border-radius: 3px;
_: ; border-radius: 3px;
_: ; -webkit-box-shadow: 10px 10px;
_: ; -khtml-box-shadow: 10px 10px;
_: ; -moz-box-shadow: 10px 10px;
_: ; box-shadow: 10px 10px;
}
更新:
较少的 v1.6.0 引入了 Property Interpolation 功能,所以现在您不再需要任何 hack:
.vendor(@property, @value) {
-webkit-@{property}: @value;
-khtml-@{property}: @value;
-moz-@{property}: @value;
@{property}: @value;
}
#usage {
.vendor(border-radius, 3px);
.vendor(box-shadow, 10px 10px);
}