在修饰符内嵌套元素是一个已知问题。有很多解决方法。
可变方式
将块元素存储在变量中。
并在修改器内创建元素时使用它进行插值。
.block {
$block: &;
&__element {
property: value;
}
&--modifier {
property: value;
#{$block}__element {
property: value;
}
}
}
请参阅下面的输出。
功能方式
1. 创建一个返回块元素的函数。
它将获取父选择器并剪切之前的单词--
(即块)。看起来很hacky,但这是最简单的方法。
@function block() {
$selector: str-slice(inspect(&), 2, -2);
$index: str-index($selector, '--') - 1;
@return str-slice($selector, 0, $index);
}
2. 使用内插函数。
这将返回块的名称,因此您不必重复它。
.block {
property: value;
&--modifier {
property: value;
#{block()}__element {
property: value;
}
}
}
请参阅下面的输出。
两种方式都将输出到:
.block {
property: value;
}
.block--modifier {
property: value;
}
.block--modifier .block__element {
property: value;
}