所以我正在按照BEM标准做一些造型。
我正在做的一个例子是:
.block{
&__element {
}
}
我想做的是:
// file a
.block {
...
}
-
// file b
// add magic to reference the `block`class in file a
&__elelemnt {
...
}
我目前正在做的事情:
// file a
.block {
...
}
-
// file b
.block__elelemnt {
...
}
(手动将block
部分添加到名称中)
有没有办法以更智能的方式引用它?
提前致谢
答案 0 :(得分:0)
这可能是你能做的最好的事情。
$namespace: "block";
.#{$namespace}-myClass {
...
}
输出
.block-myClass {
...
}
您可以将变量$namespace
保留在文件顶部或其他文件中import
。使用变量的优点是您可以更新一次,所有引用都将更新。
答案 1 :(得分:0)
SASS就是DRY。
如果你想要修改任何东西,你应该可以从一个地方修改它。如果您需要跨多个文件提供任何可用内容,请考虑在_vars
文件中定义其值,并将其包含在您需要的任何位置。另请注意,这与代码短缺无关,但具有代码可维护性和灵活性
实际上,即使您确实要编写更多代码(实际上并没有发生),DRY的优势远远超过它。
以下是应该如何做的:
/* _vars.scss: */
$block:block;
/* a.scss: */
@import _vars;
.#{$block} {
...
}
/* b.scss: */
@import _vars;
.#{$block}__element {
...
}
现在,只要您需要更改block
值,就可以从一个地方执行此操作:_vars.scss
。
但是,在实践中,大多数人使用初始技术(嵌套):
.block {
...
&__element {
...
}
}
可能.block
和.block__element
相关,总体而言,将它们放在同一个文件中会更有意义。随着您的应用程序越来越复杂,如果您的代码过于复杂,您将发现难以跟踪代码。
答案 2 :(得分:0)
您可以拥有此文件结构:
block-1/
--block-1.scss
--element-1.scss
--element-2.scss
block-2/
--block-1.scss
--element-1.scss
--element-2.scss
导入元素文件信息块文件。
<强> block.scss:强>
.block {
color: red;
@import "element-1.scss";
@import "element-2.scss";
}
<强>元素-1.scss:强>
&__element-1 {
color: green;
}
编译为:
.block {
color: red;
&__element-1 {
color: green;
}
}