【CSS】BEMとは何か?Block(ブロック), Element(エレメント), Modifier(モデファイヤ)の意味や使い方を実例で解説

css3-prograshi(プロぐらし)-kv CSS・SCSS
記事内に広告が含まれていることがあります。
[PR]

CSSを使っているとBEM(ベム)という言葉を耳にすることがあります。

BEMを耳にすると、Block(ブロック), Element(エレメント), Modifier(モデファイヤ)といった言葉もセットで聞こえてきます。

これらは、CSSを適用する要素の名前をとてもわかりやすくしてくれる便利なものです。このため、様々な企業で取り入れられています。

ここでは、BEMと何か?Block(ブロック), Element(エレメント), Modifier(モデファイヤ)とは何か?についてまとめています。


BEMとは何か?

BEMとは「Block Element Modifier」の略で、CSSを適用するためのクラス名(セレクタ名)の付け方を定義したものです。いわゆるセレクタ名の付け方です。

BEMという名前が指すとおり「Block(ブロック)」「Element(エレメント)」「Modifier(モデファイヤ)」の3つの機能に分けて命名していくルールです。

Yandex(ヤンデックス)というロシアの検索エンジンを開発する人たちによって使われたのが最初と言われています。

(参考)Wikipedia Block, Element, Modifier


Block, Element, Modifierとは何か?

BEMの「Block(ブロック)」「Element(エレメント)」「Modifier(モデファイヤ)」はそれぞれ、以下のように定義されています。


Block(ブロック)とは何か?

Block(ブロック)は大きな一つの塊・機能です。例えば、レビューなどの複数のタグで構成される一番外側のタグ(ラッパー)に付けるのがBlock名です。

また、ブロック名がユーザー詳細(user detail)といったように複数の単語になる場合は、ハイフンでつないで「user-detail」とします。


Block(ブロック)の例

.user-detail{
  処理
}

.c-review{
  処理
}


合わせて読みたい

ブロック名をハイフンでつないでいくと、ブロック名だけでかなり長い名称になってしまうことがあります。その場合の対処法については下記をご参考ください。

【CSS】BEMの命名ルールのポイント。あまりにも長くなる場合は、新しい名前を付ける


Element(エレメント)とは何か?

Element(エレメント)はBlockの構成要素です。例えば、レビューの中に、ユーザーアイコン、プロフィール、レーティング、コメントなどの要素があります。それぞれが一つ一つのElementとなります。

アンダーバー2つを使って「 __エレメント名 」として記述します。

Element(エレメント)の例

.user-detail__name{
  処理
}

.c-review__icon{
  処理
}


Modifier(モディファイヤ)とは何か?

Modifier(モディファイヤ)は色やサイズを変えるといった微調整をするときに指定する命名規則です。例えば、レビューの中のアイコンに赤色を適用するといった場合にModefierを使います。

ハイフン2つを使って「 –モデファイヤ名 」として記述します。

Element(エレメント)の例

.user-detail__name--black{
  処理
}

.c-review__icon--large{
  処理
}


BEMの命名規則一覧と実例

BEMの命名規則をまとめると以下のようになります。

項目内容命名規則クラス名の例
Block独立して再利用できる要素機能がわかる名前にするuser-detail
ElementBlockの中にのみ存在できる要素__ (アンダーバー2つ)user-detail__icon
ModifierBlockやElementを修飾する— (ハイフン2つ)user-detail__icon–red


FLOCSSにおけるBEMの仕様

BEMによる命名規則はCSSの書き方の定義の一つであるFLOCSSでも使用されています。

合わせて読みたい

FLOCSSとは何か?については下記をご参考ください。

【CSS・SASS】FLOCSS(フロックス)とは何か?

例えば、FLOCSSを使ってBEMの命名規則を適用すると.scssファイルは以下のような記述になります。

.c-key-visual {
  background-repeat:  no-repeat;
  background-position: center;
  background-size: cover;
  height: 340px;
  &__title{
    font-size: 36px;
    font-weight: bold;
  }
  &__lead{
    font-size: 24px;
  }
  &__title--black,
  &__lead--black {
    color: #333;
  }
}
  • Block(ブロック): c-key-visual
  • Element(エレメント): __title, __lead
  • Modifier(モデファイヤ): --black

なお、HTMLタグの例は以下のようになります。

<div class="c-key-visual">
  <img src="../images/kv.jpg">
  <p class="c-key-visual__title c-key-visual__title--black">タイトル</p>
  <p class="c-key-visual__lead">リード文</p>
</div>


合わせて読みたい

SASSの記述の中で使用している「&」については下記をご参考ください。

【SCSS】セレクタの&(アンド・アンパサンド)とは何か?意味や使い方、注意点、メリットを実例で解説


タイトルとURLをコピーしました