我为一个由开发团队(而不是一个开发团队)构建的新网站设置了一些框架。我当前的css设置使用以下LESS文件:
grid.less
mixins.less
style.less
template-home.less
template-destination.less
文件style.less
导入所有内容:
@import "grid.less";
@import "mixins.less";
@import "template-home.less";
@import "template-destination.less";
在我看来这是一个相当明显和常见的方法 - 但是,如果我想在其中一个template-*
文件中使用已定义的mixin,LESS无法编译该文件,因为NameError: .exampleMixin is undefined
。< / p>
通过阅读文档,我看来有两个选项,这两个选项都涉及将mixins.less
导入每个可能使用它的模板文件。我可以添加:
// either reference the file
@import (reference) "mixins.less";
// or use once
@import (once) "mixins.less";
我明白这些是做什么的,但是什么是专业人士和每个人的利弊?为什么我不能将mixin导入全局style.less
并在每个其他包含的文件中使用它们?
答案 0 :(得分:4)
为什么我不能将mixins导入全局样式。并在每个其他包含的文件中使用它们?
此方法应该可以正常运行而不会出现任何编译错误。只有当您尝试编译template-*.less
而没有mixins.less
时,它才会大惊小怪。您收到错误,检查mixins.less
的位置是否正确。
我明白这些是做什么的,但是什么是专业人士和每个人的利弊?
一次的原则是只导入一次文件。例如,您可能在mixins.less
个文件和template-*.less
中都有styles.less
的导入。这将阻止文件被多次导入,从而导致样式表中出现重复的CSS样式。
值得注意的是once
实际上是import
的默认行为,因此不需要指定。
参考非常聪明。如果使用引用导入,则在编译时,它将仅从导入文件中输出已在parent less文件中使用的样式。通常,这将用于mixin类和扩展类。
示例强>
//Mixins.less
.m-bacon {
color: red;
}
.m-smokey {
color: pink;
}
// Styles.less
@import (reference) mixins.less;
.pork {
.m-bacon;
}
如果编译了styles.less,它将只包含pork
类。
//Output
.pork {
color: red;
}
总之once
会阻止多次生成相同的样式。这也是@import
的默认行为。 reference
可以防止未引用的mixin类并扩展在编译时生成的类。