BEM を使うべき5つの理由(なぜ BEM が G.R.E.A.T といえるのか)

5 Reasons To Use BEM (a.k.a. why is BEM G.R.E.A.T.)

translated on

CSS は、比較的簡単に使いこなすことができます。しかし、それを使い続け綺麗な状態を長期的に保つこととは全く別の話です。知らず知らずのうちに乱雑になっていきます。ありがちですよね?そんな時、命名規則の出番です。様々な選択肢がある中で私が選んだのが BEM なのです。

BEM とは何か

BEM とは、命名規則の一種で、モジュラーでメンテナンス可能スタイルを書くことができます。

BEM は、Block-Element-Modifier の略語で、クラス名は3つ[^1]のパートから成ります。実際の表記は block__element--modifier となり、Block から始まり、次に Element(アンダースコアが2つ)、そして最後に Modifier が続きます(ダッシュが2つ)。

画像1:BEM で命名されたコンポーネントの例
画像1:BEM で命名されたコンポーネントの例

Block(ブロック)

Block は、独立しており再利用できるものです。フロントエンドフレームワークにおけるコンポーネントと捉えらることもできるでしょう。例えば、card はよいブロックといえるでしょう。

注:shopping-list のような具体的な名前は避け、check-list 等のより一般的な名前にすることで、様々な場面で再利用可能になります。たとえば、check-list と命名すると、ショッピングでも TODO リストでも使えるでしょう。

Element(エレメント)

Element は、Block の中にのみ存在できるものです。例えば、card__titlecard__textcard__button のようなものです。

注:Element は1階層だけネストできます。つまり、card__button__text とはできません。代わりに、button という Block を新たに定義し、button__text のようにしましょう。

Modifier(モディファイア)

Modifier は、Block または Element を修飾したい場合に使用します。例えば、見た目や動きが少しだけ違うものを作りたい場合などです。これに従うと、card--featuredcard__button--primary のようなクラス名ができるでしょう。

注:Modifier は、あくまで修飾したいの時のみに使われ、従ってベースとなるクラスが必ず存在します。カードを例にするとこうなるでしょう:card card--featured。ベースとなる card クラスが paddingborder を持っており、card--featured クラスは背景の色を変える、といった具合に。

画像2:Modifier が適用されている例
画像2:Modifier が適用されている例

[^1]: ネームスペースprefix としてつけることもできます。

さらに詳しい情報は、こちらこちらから。また、BEM でやっていいこと、悪いこと もあります。

なぜ BEM が G.R.E.A.T なのか

1. G = Global(グローバル)

BEM は、最も知られた命名規則の一つです。そのため、仮にあなたが新メンバーをプロジェクトに迎える時も、彼らはすでにこの命名規則について知っている可能性があり、意見の衝突を減らしたり初日から生産的に働いてもらうこともできるのです。

2. R = Readable(読みやすい)

クラス名が説明的であるおかげで、スタイルシートが読みやすくなります。深くネストされたセレクタよりも、見やすくなるだけでなく、より早く動作します。

画像3:BEM vs. ネストされたセレクタ

3. E = Expandable(拡張可能)

BEM では、CSS のセレクタ詳細度が最小限になるため、簡単にバリエーションを追加することができます。単一の Modifier クラスで十分です。同等のセレクタの詳細度のような苦労はありません。

画像4:2つめのアイコンのスタイルを上書きする(BEM vs. ネストされたタグ)

4. A = Adaptable(適応性がある)

BEM は、そのモジュール的な特性により、フレームワークと相性が良いです。また、スタイルがタグの種類やネストに依存しないため、ドキュメント構文を変更した際にも壊れにくくなります。

画像5:タグの種類とネストの重要性(BEM vs. タグ)

5. T = Tough(難しい)

コンピューターサイエンスで難しいのは、キャッシュの無効化と命名の2つのみだ。

— Phil Karlton

BEM を使い始めようとした時、おそらくあなたは絶えずそれに苦戦するでしょう。しかし、それは逆によいことだと言えます:

  • 適切なブロックの名前を探すことで、他の人にとってコードがきれいで読みやすくなります
  • 同意語と取り組むことで、既存のブロックを再利用することを推奨してくれます
  • マルチレベルのネスティングを避けることで、ドキュメントの構造を再考することになるでしょう

つまり、BEM は、詳細に注意を払うように仕向け、そのものについてよく考えさせ、結果としてコードの品質が高まるのです。どうです?はじめる準備はできましたか?

著者について

Joanna は EL Passion のフロントエンドエンジニアです。Linkedln で彼女について知ることができます。

EL PassionFacebookTwitterInstagram もチェックしてください。