BEM
Block Element Modifier
再利用可能なコンポーネントを作るCSSの命名規則
Block
1つの使い回しができるコンポーネント
見た目ではなく「それが何であるか」についてkebab-caseで命名する
red-text-btnではなくerror-btnである
Blockはネストしても良い
marginなど周りに影響するスタイルを利用しない.
Mix(BEM)というテクニックでなんとかする
Element
Blockの中で用いられる要素で,Blockの外では利用できないもの.
search-formに対するsearch-form__buttonなど
Elementを独立させての使用は不可
Elementが独立するよう,命名としてネストは許容しない.
code:nest.html
<!-- 検索ブロック -->
<form class="search-form">
<!-- × span がbuttonの要素になってる -->
<button class="search-form__button">
<span class="search-form__button__text">Search</span>
</button>
</form>
<!-- 検索ブロック -->
<form class="search-form">
<!-- ○ span は検索ブロックの要素 -->
<button class="search-form__button">
<span class="search-form__text">Search</span>
</button>
</form>
子孫セレクタを利用しないで均一に指定する
code:.css
/* × 要素の詳細度が高い */
.menu {}
.menu .menu__item {}
.menu .menu__bun {}
/* ○ 詳細度が均一 */
.menu {}
.menu__item {}
.menu__bun {}
Modifier
BlockかElementに対して使用する,修飾のためのクラス.
search-form__button--disabledなど
ディレクトリ構造
1つのBlockに1つのディレクトリ
配下にElementとModifierを定義したディレクトリを配置する
Block名とディレクトリ名は同じにする
Elementのディレクトリ名は__から始まる
Modifierのディレクトリ名は_から始まる
参考
https://zenn.dev/nagan/articles/dac6fa662f4dab