css - 如何在 LESS CSS 1.4+ 中覆盖 mixins

标签 css less

我一直在使用我认为非常优雅的模式来定义可重用组件/小部件的样式,使用 LESS。它在 LESS 1.3- 中运行良好,但最近升级后,我的整个图书馆都坏了。有谁知道在 1.4+ 中完成这样的事情的方法吗?

这是一个非常简单的组件示例:

#componentName {
  .loadMixins(){
    .text() {}
    .header() {}
  }

  .apply(){
    > h3 {
      // markup-specific styles
      padding: 3px;
      margin-bottom: 0;

      // custom styles
      .header();
    }

    > div.body, > div.popup p {
      color: red;

      // custom styles
      .text()
    }
  }
}

下面是它的使用方式:

.coolWidget {
  #componentName.loadMixins();

  // override mixins here
  .text(){
    color: green;
  }

  #componentName.apply();
}

这使所有与标记相关的样式从用户那里抽象出来。我可以完全改变我的标记,而用户的样式仍然有效。根据less.js changelog , 1.4.0 Beta 1 有一行“mixins 中的变量不再‘泄漏’到它们的调用范围”

有什么办法解决这个问题吗?

最佳答案

严格来说,嵌套变量和混合仍然扩展到调用范围,除非该范围已经定义了这些名称。

您上面的示例导致错误:

SyntaxError: .header is undefined...

并且预计在 .coolWidget(或其他任何地方)中实际上没有定义 .header()。 这可以通过在#componentName 内某处为 .text 和 .header 提供“默认”定义来解决。 例如,如果您将 .loadMixins() 修改为:

.loadMixins() {
    .text();
    .header();

    // default properties in case a caller does not provide its own:
    .text()   {}
    .header() {}
}

然后示例编译正常,所有文本/标题属性都按预期覆盖。


我可以想象您的库可能会因为新的范围规则而被破坏,但是您在上面给出的这个特定示例并没有说明问题。

关于css - 如何在 LESS CSS 1.4+ 中覆盖 mixins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18792255/

相关文章:

javascript - 导航到另一个页面后保留 CSS 样式

css - 如何使用 `variables.less` 文件?

CSS LESS 占位符混合

html - 如何避免重复多个 css 类

css - 使用 LESS 构建选择器列表

IE7下的jQuery下拉菜单

javascript - 如何调整空格键和输入仅适用于第三个按钮而不适用于任何其他按钮?

html - 无法在 Laravel 中获取输入的全宽

javascript - 在 iframe 中制作全屏元素

html - LessCss/Sass - 访问内部变量?