好的,首先,有个一般性的评论:使用CSS预处理器(例如LESS,SASS或其他任何东西)生成供应商前缀实际上是当今滥用最大的方法之一(确实,不需要用前缀和浪费来充实您的代码)您需要花费时间编写此类mixin,因为出现了诸如Autoprefixer,-prefix-free之类的工具。
不管哪种方式,这都是(多种)通用解决方案(但考虑到代码量及其复杂性,我认为这实际上是一个矫kill过正的方法,在这里,我将使用LESS1.6.0示例,因为在早期版本中,它会变得更加冗长而笨拙):
// usage:element1 { .vendorize(transition-property; opacity, transform);}element2 { .vendorize(transition-property; width, box-shadow, color);}element3 { .vendorize(transition-property; height);}// implementation:// prefixes we want to be used:@prefixes: -webkit-, -moz-, -o-, ~'';// here we specialize what values are to be prefixed:.vendorize-value(transform) {.true}.vendorize-value(box-shadow) {.true}// etc..vendorize-value(...) when (default()) {.false} // to handle not prefixed values// and now the mixin that can apply all of above specializations:.vendorize(@property, @values) { .-1(); .-1(@i: length(@prefixes)) when (@i > 0) { .-1((@i - 1)); @prefix: extract(@prefixes, @i); .-2(); } .-2(@j: length(@values)) when (@j > 0) { .-2((@j - 1)); @value: extract(@values, @j); .vendorize-value(@value); } .false() {@{prefix}@{property}+: @value} .true() {@{prefix}@{property}+: ~'@{prefix}@{value}'}}(当然,如果您 只
transform需要加上前缀,但看起来仍然太疯狂,则可以简化一下)。
upd:修复了一些错误。



