我正在创建一个主要使用HTML和CSS的小型个人项目,但是我对此并不陌生,并且遇到了一些问题。我想使用W3.CSS框架,但是我不想在html文件(例如<div class="w3-container">...)中显式使用它,因为我以后可能想使用其他东西,并且不想重构每个文件。谷歌搜索,我了解到less mixins的想法,我想使用自己的style.less文件,然后从其中导入w3.css并继承例如标题标签的.w3-container类,我相信只有CSS才能实现。无论如何,我想做的是:

@import "w3.css";
header {
  .w3-container;
}


这两个文件“ style.less”和“ w3.css”都位于同一文件夹中,我使用以下命令尝试对其进行编译:

lessc style.less style.css


输出错误:

NameError: .w3-container is undefined in <path to style.css> on line 3, column 2


我可能没有少用它应该的样子。我查看了其他问题,例如this one,但无法完成。我还注意到我的node.js和npm确实过时了:node: v0.12.4, latest: v5.11.0 npm: 2.10.1, latest: 3.8.7,不是吗。

为什么不起作用?

我还有什么其他方法可以避免显式使用“ w3-container”之类的类?

谢谢。

最佳答案

问题1

关于错误:

NameError:.w3-容器在第3行第2列中未定义

您已将.w3-container用作mixin,但尚未定义mixin。您需要像这样定义mixin:

@import "w3.css";

.w3-container() {
   /*Styles to apply to the mixin would go here*/
}

header {
  .w3-container;
}


但是,听起来并不像使用mixin实际上是您的目标。

问题2

关于您的评论:

还有什么其他方法可以避免显式使用“ w3-container”之类的类

LESS可以编译为CSS,因此除了提供一些扩展功能以减少重复并使代码更易于维护之外,LESS在选择器(例如别名W3.css)方面没有提供任何魔术。如果您不想添加新的CSS类,则您的选择仅限于使用具有更高特异性的有效CSS选择器。下面的示例基于路径。如果w3.css包含:

header {
    color: blue;
}


然后要将目标放在节中,可以使用更具体的选择器(在LESS中):

section {
    header {
        color: orange;
    }
}


这将编译为CSS:

section header {
    color: orange;
}


问题第3部分

当您尝试将特定类的元素的实例作为目标时,在类的前面加上&并包括方括号,以定义样式的属性非常重要,如下所示:

header {
  &.w3-container {
    color: orange;
  }
}


这将编译为以下CSS:

header.w3-container { color: orange; }


如果使用.w3-container;就其本身而言,LESS会假定您要在此处使用mixin,并且由于没有使用名称.w3-container定义的mixin,因此会抛出问题1的错误。

关于html - 在外部文件W3.css中用类创建LESS mixin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36818677/

10-09 21:44