修飾子内の要素のネストは既知の問題です。多くの回避策があります。
可変式
ブロック要素を変数に格納します。
モディファイア内で要素を作成するときに補間して使用します。
.block {
$block: &;
&__element {
property: value;
}
&--modifier {
property: value;
#{$block}__element {
property: value;
}
}
}
以下の出力を参照してください。
機能方法
1. ブロック要素を返す関数を作成します。
親セレクターを取得し、前の単語--
(ブロック) をカットします。ハックに見えますが、これが最も簡単な方法です。
@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;
}