今回は、BEMを使用したCSS設計について解説します。

前回、SMACSSを使用したCSS設計について解説をしました。
SMACSSが、CSSの構成全体(ファイル管理、命名、レイアウトやモジュールの分離など)に関する概念で、
BEMは、厳格なclass名の命名ルールを定めたものです。

SMACSSについては下記の記事で解説していますので、興味のある方は閲覧してください。

SMACSSを使用したCSS設計 | サンプルコードで解説

概要

BEMは、”Block”、”Element”、”Modifier” の頭文字を取った略語であり、
文字通り、サイト内の要素を”Block”、”Element”、”Modifier”に分離してclass名を割り当てていきます。

BEMの構成

まずは視覚的に”Block”、”Element”、”Modifier”の役割を理解していただきます。

下記の画像を見てください。
赤枠がBock、緑枠がElementを意味します。

Blockは、カラムなどの大きな塊部分を指します(SMACSSだとモジュールに近い)。

ElementはBlock内の各要素(タイトル、説明文、ボタンなど)を指します。

では、Modifierは何を意味するのでしょうか?
Modifierは装飾に使用します。下記の画像の赤枠を見てください。
基本的にボタンスタイルなどは、サイト内で統一されることが多いですが、
特定の箇所のみ色を変えたり、配置を変えたいケースも出てきます。
そのような時に、Modifierを使用し、オリジナルのclassを付与してスタイルを当てます。

命名規則

BEMの命名規則は下記のように厳格に定められています。

Block__Element--Modifier

若干複雑に感じてしまうかもしれませんが、”Block”、”Element”、”Modifier”の概念さえ理解できれば、
命名規則にしたがってclassを指定するだけなので簡単です。

記述例

BEMの概念を理解したところで、実際のコードで紹介します。
下記の画像をBEMの概念に従ってコーディングしていきます。

See the Pen BEM CSS by waibandl321 (@JumCode) on CodePen.

解説

Block(赤枠)にはarchiveItemというclassを付与し、Element(緑枠)の各要素(titleなど)を__で繋ぐことでBEMの記述が完成しました。

CSSを見ていただくと、各要素の詳細度も一定になっているので、保守性の高いCSSと言えるでしょう。
また、セレクタが意味のある命名になっているので、サイト内のどこにスタイルを当てているかも、一目で理解することができます。

下記はSCSSで記述した場合の構成ですが、ネストが浅く、可読性の高い記述と言えるでしょう。

.archiveItem {
  &__inner {}
  &__title {}
  &__description {}
  &__button {}
}

最後に

BEMはメンテナンス性を向上させるCSSの設計手法として、筆者も実務で使用しています。

最初はCSSを書くことに必死でしたが、複数ページのCSSコーディングを行うようになり、保守性の高いCSSを意識するようになりました。BEMを使用してCSS設計を行うことで、メンテナンス性が大幅に向上するので、読者の方も是非参考にしていただけますと幸いです。

カテゴリー: CSS