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が–だったり、_だったりしないことだと思います。