BEM や SUITCss などの CSS 命名規則の背後にある理由を取り上げて理解しようとしています。SCSS が存在する場合、子孫クラス名の値を理解するのに苦労しています。
例えば:
<ul class="menu">
<li class="menu__item"></li>
<li class="menu__item"></li>
<li class="menu__item">
<a href="#" class="menu__item_link">link</a>
</li>
</ul>
.menu {
.menu__item {
//styles
.menu__item__link { //styles }
}
//or alternatively this syntax..
&__item { //styles }
}
SCSS でルールをネストする機能があるため、祖先クラス名をコードに含める説得力のある理由がわかりません。上記では、子孫クラス名を使用して、「メニュー」内にある「項目」にのみ使用するスタイルを定義しました。しかし、ネストされた構造はすでにこれを伝えています! とにかく、menu__item のルールはメニューの下の項目にのみ適用されるのに、なぜそれをクラス名に含める必要があるのでしょうか?
なぜだめですか:
<ul class="menu">
<li class="item"></li>
</ul>
.menu {
.item {//styles}
}
子孫の命名規則がより明示的で、おそらくより将来に適していることを理解しています。ただし、それは html でより明確になっているだけだと私は主張します。この「メニュー」モジュールの作成方法を調べたい場合は、CSS を調べるだけで、メニュー内に項目がどのようにネストされているかを明確に確認できます。
考えられる利点の 1 つは、次のようにネストされていない CSS を記述できることだと思います。
.menu { //styles }
.menu__item { //styles }
.menu__item__link { //styles }
そして、どこでも「menu__item」を使用すると、これがメニューの下のアイテムのスタイリングであることがクラス名で明示されます..しかし、なぜそれをメニューの子孫として定義するのでしょうか? (別の利点は、ネストされていない場合の CSS 識別子文字列が短いことだと思います)
クラス名が別のクラス名の子孫として使用される場合、SCSS でのネストによってこれが達成され、そのロジックが明確に示されるように思えます。では、なぜこの BEM 構文が必要なのでしょうか?
この種の規則の理由を誰かに説明してもらいたいです。いわゆるベスト プラクティスを遵守したいのですが、規約を完全に理解せずにやみくもに遵守することは困難です。