BEMとCSSの命名規則

BEMとCSSの命名規則:クラス名ビルダー付き | We.Inc

BEMによるブロック、エレメント、モディファイアの命名方法を、クラス名をチェックするビルダー付きで解説します。ユーティリティクラス、CSS Modules、@scopeとも比較します。

BEMとCSSの命名規則

BEMはBlock、Element、Modifier(ブロック、エレメント、モディファイア)の略です。ブロックは.cardのような独立したコンポーネント、エレメントはその内側でのみ意味を持つ部品で、アンダースコア2つで.card__titleと書きます。モディファイアはバリエーションで、ハイフン2つで.card--featuredと書きます。モディファイアは基本クラスの代わりではなく、必ず基本クラスと並べて付けます。

BEMを1つの表で

CSSプロジェクトが整然と保たれるか、少しずつ上書きの山になっていくかは、命名で決まります。このページでは公式BEMサイトのルールを解説し、入力に合わせて自分のクラス名をチェックし、現在チームがスタイルの衝突を防ぐために使っているほかの方法とBEMを比較します。

よくある質問

BEMは何の略ですか?

Block、Element、Modifier(ブロック、エレメント、モディファイア)の略です。すべてのセレクターを単一のクラスに保つCSSクラスの命名手法で、詳細度が平らに保たれ、クラス名を見ればどのコンポーネントに属するかがわかります。

BEMがアンダースコア2つとハイフン2つを使うのはなぜですか?

「検索フォーム」を表すsearch-formのように、名前の中ではすでに単一のハイフンが使われているからです。区切り文字を2つ重ねることでブロック、エレメント、モディファイアの境界が明確になり、.search-form__submit-buttonは1つのブロックと1つのエレメントとして読めます。

TailwindやCSS Modulesを使う場合でも、BEMを使う価値はありますか?

ユーティリティクラスではコンポーネントのクラス名を書くことがほとんどないため、BEMの重要性は下がります。CSS Modulesではビルドツールが名前のスコープを管理してくれるため、短いキャメルケースの名前が推奨されます。それでもBEMは、素のCSS、Sass、WordPressのテーマ、複数のフレームワークで共有するデザインシステムにとって有力な選択肢です。

エレメントの中のエレメントはどう命名すればいいですか?

親のエレメントではなく、ブロックに結び付けます。カード本体の中のタイトルは、HTMLで.card__bodyの中に入れ子になっていても.card__titleです。入れ子の部品が単独で再利用できるなら、代わりに新しいブロックにしましょう。

命名規則が解決する問題

ブロックがブロックを含むとき

ネイティブCSSのスコープ機能が追いついてきた

BEMとほかの方法の比較

クラス名の衝突を防ぐ方法

BEMコンポーネントの完全な例

エレメントとモディファイアを持つカードブロック

各セレクターは1つのクラスです。強調表示用のモディファイアは枠線を変え、ブロックのモディファイアを通じて1つのエレメントを反応させます。

BEMのよくある間違い

間違いと正解

BEMクラス名ビルダー

ブロック、エレメント、モディファイアを入力すると、クラス名と対応するHTML、CSSを生成します。名前がルールに反すると警告します。

ブロック

エレメント(任意)

モディファイア(任意)

ブロック

エレメント

モディファイア

{label}:__ や -- は自分で入れないでください。区切り文字はビルダーが付けます。

{label}:小文字のラテン文字、数字、単一のハイフンを使ってください。

エレメントはほかのエレメントを含められません。

これらの名前はBEMのルールに従っています。

{label}をコピー

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る