BEM(Block, Element, Modifier)は、CSSクラス名のための命名規則です。BEMの命名規則を使うことによって、コードの可読性と再利用性を高めるのに役立ちます。クラス名には半角英数字の小文字を使用、複数の単語は-(ハイフン)で繋ぎます。
BEMは下記の3つの主要な概念で構成されています。
①Block(ブロック)
再利用可能な独立した機能を持つUIコンポーネント。例えば、.button、.menu、.cardなどがブロックに該当します。
②Element(エレメント)
ブロック内の一部分で、ブロックのコンテキストに依存しています。エレメントは__(2つのアンダースコア)を使ってブロック名に接続されます。例えば、.button__iconや.menu__itemなどがエレメントになります。
③Modifier(モディファイア)
ブロックまたはエレメントの状態やバリエーションを表します。モディファイアは--(2つのハイフン)を使ってブロックまたはエレメントに接続されます。例えば、.button__icon--largeや.menu__item--activeなどがモディファイアに該当します。
③のModifierに関しては元は_(シングルアンダースコア)だったようですが、今は–を使うケースが多いようです。大切なことは一つの案件に対して、統一性を持たせることで、Modifierが–だったり、_だったりしないことだと思います。
