【问题标题】:Is there a generic way to add vendor prefixes in LESS?是否有在 LESS 中添加供应商前缀的通用方法?
【发布时间】:2013-09-04 16:28:05
【问题描述】:

我目前有一个mixins.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');

哪个会产生与上述相同的结果?

【问题讨论】:

标签: less


【解决方案1】:

注意:

建议停止依赖这种技术并考虑使用专用的前缀工具(例如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);
}

【讨论】:

  • 感谢您的更新,很高兴知道它现在已经成为可能!
  • @property : @value; 将@value 分配给@property,因此中断...应该是@{property} : @value;
  • @Andreas Hultgren,是的,当然,我的错 - 现在已修复。
  • @seven-phases-max 如何通过 less 反模式硬编码供应商?
  • @Andrew 因为您可以编写没有前缀和杂乱混合的普通代码,并通过专门的工具自动获取所有前缀。虽然都已经写在通知里了。
猜你喜欢
  • 2012-09-14
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
相关资源
最近更新 更多