4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【CSS】クラス名でハイフン--やアンダースコア__が2つ並んでるのを見かけた。それはBEM記法

Last updated at Posted at 2022-03-26

きっかけ

CSSの学習をしていたら、こんな感じのクラス名が出てきました。

  • Foo__Bar
  • Foo--Bar

言語ごとにスネークケースキャメルケースなどの使い分けがあるかと思いますが、

初学者のわたしとしては、CSSのクラス名ってイマイチどう書くのが正解かハッキリしないな〜と感じていました。

そんな中あらわれたハイフン2つ/アンダースコア2つのクラス名。

調べるとBEM記法という命名法を見つけました。

BEM(ベム)記法とは

CSS設計手法の1つで、クラス名を以下の3つの概念に応じて命名します。

  • Block
  • Element
  • Modifier(モディファイア)

3つの頭文字をとってBEMというわけです。

Block

単体で再利用できる独立した機能のかたまり(コンポーネント)をBlockと呼びます。

例:ヘッダー、検索パーツ

Blockの中に子としてBlockを含める場合もあります。

Element

単体では使用せず、Blockの中で使用する部品をElementと呼びます。

例:検索パーツの入力フォーム

Elementは、属するBlockを明示したクラス名をつけ、アンダースコア2つ__で繋ぎます。

  • Block__Element

Modifier

BlockやElementのスタイル違い(同様の役割をもつが色や形、状態が違うもの)をModifierと呼びます。

例:入力フォームの枠を丸くしたパーツ

Modifierは、元となるパーツを明示したクラス名をつけ、ハイフン2つ--で繋ぎます。

  • Block--Modifier
  • Element--Modifier

まとめ

BEM記法では

  • Elementならアンダースコア2つ__
  • Modifierならハイフン2つ--

で繋ぎます。

ちなみに、これらの区切り記号をセパレータと呼びます。

組み合わせによっては「Block__Element--Modifier」なんて形のクラス名もでてきます。

感想

独立した機能ごとにパーツをわけ、再利用可能にする発想はまさにオブジェクト指向ですよね。

Blockの階層が深すぎると、クラス名がとんでもなく長くなってしまう...気もします。

クラス名は様々な工夫の仕方があるようで、つくるものの性質にあわせ柔軟に使い分けたいものです。

BEMの他にも、SMACSSFLOCSSといった記法もあるそうな。

また、CSSを拡張した言語であるSASSも気になります。

以上、案外奥深いCSSの世界のお話でした。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?