サブモジュールにあるモジュール要素に変更を加える必要がある場合、BEM を使用して css を記述する場合、モジュール要素をサブモジュールにネストするか、モジュール要素の新しいクラス名を作成しますか?
新しいクラスの作成
新しいクラス名 (つまりmodule--modifier__element
) を作成することは、BEM の精神に近いようです。不必要な特異性を防ぎます。ただし、モジュール内の各要素に追加のクラスを追加するという多くの余分な作業も追加されます。
ネスティング
モジュール修飾子内に既存の要素クラスをネストする (つまり、module--modifier module__element {}
特定性が追加されますが、(少なくとも大規模なモジュールの場合) 多くの作業が節約され、マークアップの保守が容易になります。たとえば、モジュールの修飾子を変更する必要がある場合)。すべての子要素で変更するのではなく、マークアップの 1 か所だけ変更する必要があります。
それに加えて、すべての子要素が変更されない場合は、css を参照して、どの子要素にクラスを追加する必要があるかを判断する必要があります。
サンプルコード
.module {
display: block;
width: 90%;
height: 2rem;
margin: 2rem auto;
padding: 0.5em;
background: #fff;
border: 2px solid #333;
}
.module--modified1 {
background: #333;
border: none;
}
.module--modified2 {
background: #baa;
border: 3px solid #8f8;
}
.module__element {
color: #333;
text-align: center;
}
/* Option 1 */
/* In sass this would actually be nested within the module_modified1 block */
.module--modified1 .module__element {
color: #fff;
}
/* Option 2 */
.module--modified2__element {
color: #fff;
font-size: 1.3em;
}
<div class="module">
<div class="module__element">Module</div>
</div>
<div class="module module--modified1">
<div class="module__element">Module Modifier 1</div>
</div>
<div class="module module--modified2">
<div class="module__element module--modified2__element">Modulue Modifier 2</div>
</div>