在 Sass 中匹配多个 BEM 修饰符
Matching multiple BEM modifiers in Sass
我正在使用 BEM,并且有一个带有多个修饰符的元素:
<div class="block__element block__element--m1 block__element--m2"></div>
我正在使用 SCSS 并利用它来编写与 BEM 兼容的嵌套规则。如果我想编写一个规则,其中一个元素(如上)具有 both m1 和 m2 修饰符,是否有一种方法可以编写与我当前编写它们的方式兼容的规则?这是我想要的语法,但会导致语法错误:
.block {
display: block;
&__element {
display: inline;
&--m1 {
background-color: red;
}
&--m2 {
background-color: green;
}
// Syntax error
&--m1&--m2 {
background-color: yellow;
}
}
}
我可以通过使用属性选择器来解决这个问题,但是有没有更简洁的方法?
作为记录,编译后的属性选择器应该是:
.block__element--m1.block__element--m2
将选择器名称存储在变量中。萨斯迈斯特 demo.
.block {
$module: ".block";
&__element {
$this: "#{$module}__element";
&--m1#{$this}--m2 {
background-color: yellow;
}
}
}
生成css:
.block__element--m1.block__element--m2 {
background-color: yellow;
}
@3rdthemagical 的回答确实给了我一些灵感,让我找到更好的解决方案。 Sass 根本不喜欢 &
出现在选择器开头之后,但不介意它包裹在 #{}
:
中
.block {
display: block;
&__element {
display: inline;
&--m1 {
background-color: red;
}
&--m2 {
background-color: green;
}
// Correct!
&--m1#{&}--m2 {
background-color: yellow;
}
}
}
我正在使用 BEM,并且有一个带有多个修饰符的元素:
<div class="block__element block__element--m1 block__element--m2"></div>
我正在使用 SCSS 并利用它来编写与 BEM 兼容的嵌套规则。如果我想编写一个规则,其中一个元素(如上)具有 both m1 和 m2 修饰符,是否有一种方法可以编写与我当前编写它们的方式兼容的规则?这是我想要的语法,但会导致语法错误:
.block {
display: block;
&__element {
display: inline;
&--m1 {
background-color: red;
}
&--m2 {
background-color: green;
}
// Syntax error
&--m1&--m2 {
background-color: yellow;
}
}
}
我可以通过使用属性选择器来解决这个问题,但是有没有更简洁的方法?
作为记录,编译后的属性选择器应该是:
.block__element--m1.block__element--m2
将选择器名称存储在变量中。萨斯迈斯特 demo.
.block {
$module: ".block";
&__element {
$this: "#{$module}__element";
&--m1#{$this}--m2 {
background-color: yellow;
}
}
}
生成css:
.block__element--m1.block__element--m2 {
background-color: yellow;
}
@3rdthemagical 的回答确实给了我一些灵感,让我找到更好的解决方案。 Sass 根本不喜欢 &
出现在选择器开头之后,但不介意它包裹在 #{}
:
.block {
display: block;
&__element {
display: inline;
&--m1 {
background-color: red;
}
&--m2 {
background-color: green;
}
// Correct!
&--m1#{&}--m2 {
background-color: yellow;
}
}
}