CSSのBEMとは?初心者向けに解説

CSSの「BEM」って何?

CSSを書いていると、こんなクラス名を見かけることがあります。

<div class="card">
  <h2 class="card__title">タイトル</h2>
  <p class="card__text">テキスト</p>
  <button class="card__button card__button--primary">
    ボタン
  </button>
</div>

これは**BEM(ベム)**と呼ばれるCSSの命名規則です。

今回は、BEMの基本だけを簡単に紹介します。

BEMとは?

BEMは、CSSのクラス名を分かりやすくするための命名規則です。

BEMは、

Block / Element / Modifier

の頭文字から名前が付けられています。

それぞれの意味は次の通りです。

名前意味
Block独立した部品
ElementBlockを構成する要素
ModifierBlockやElementの状態・バリエーション

この3つを組み合わせてクラス名を作ります。

Blockとは?

Blockは、ページの中で独立した部品です。

例えばカードなら、

<div class="card">

のcardがBlockです。

他にも、

header
button
nav
form
menu

などがBlockになります。

Elementとは?

Elementは、Blockを構成するパーツです。

例えばカードの中にタイトルと説明文がある場合、

<div class="card">
  <h2 class="card__title">タイトル</h2>
  <p class="card__text">説明文</p>
</div>

cardがBlockで、

card__title
card__text

がElementです。

Elementは、Blockと__でつなぎます。

Block__Element

という形です。

Modifierとは?

Modifierは、色や状態などのバリエーションを表します。

例えば通常のボタンと、強調したボタンがあるとします。

<button class="button">通常</button>

<button class="button button--primary">強調</button>

buttonがBlockで、

button--primary

がModifierです。

Modifierは--でつなぎます。

Block--Modifier

という形です。

BEMを使うと何が嬉しい?

一番のメリットは、クラス名を見ただけで、その要素が何なのか分かりやすくなることです。

例えば、

<h2 class="title">

だけだと、このtitleがどこのタイトルなのか分かりません。

一方、

<h2 class="card__title">

なら、

「cardの中にあるtitleなんだな」

とクラス名だけで判断できます。

CSSも、

.card__title {
  font-size: 24px;
}

のように書けるため、他のtitleと名前がぶつかりにくくなります。

まとめ

BEMは、CSSのクラス名を分かりやすくするための命名規則です。

覚えておきたいのは、

  • Block → 部品そのもの
  • Element → 部品を構成する要素
  • Modifier → 状態やバリエーション

最初は__や--が少し分かりにくいですが、慣れるとHTMLを見ただけで「これは何の要素なのか」が分かりやすくなります。

CSSのクラス名をどう付けるか迷っているなら、BEMを試してみるのもおすすめです。

おとうふ

田舎で働くWebエンジニア

毎日少しずつ成長中🌱
仕事・学習・暮らしの中で、自分が実際に経験したことを発信