SerchCode Pro
コード解説 SQLチェッカー JSON生成 JSON整形 RegExテスター CSS Shadow カラー変換 CRON生成 Base64変換 ブログ
SerchCode Pro
コード解説 🔍 SQLチェッカー 🔍 JSON生成 🔧 JSON整形 🔧 RegExテスター 💻 CSS Shadow 🔲 カラー変換 🔲 CRON生成 💻 Base64変換 🖌 ブログ 📖

このサイトについて プライバシーポリシー
ダークモード ライトモード

もうCSSで消耗しない!BEMという「命名規則」で、破綻しない設計を手に入れる

公開日: 2025年9月24日

プログラミング学習を進め、自分のWebサイトのデザインにこだわり始めると、誰もが必ず通る道があります。 それは、「CSSカオス」です。

最初は綺麗だったはずの style.css が、機能追加を繰り返すうちに、どんどんカオスになっていく。
「ここのボタンの色を変えたら、あっちのカードの色まで変わってしまった!」
「この .title って、どのページのタイトルだっけ…?」
「もうどこを触っても怖くて、!important で無理やり上書きするしかない…」

そんな経験、ありませんか? 今日は、このCSSカオスという悪夢からあなたを解放し、大規模なサイトでも破綻しない、メンテナンス性の高いCSS設計を可能にするための、非常にシンプルで強力な「命名規則」、BEM(ベム)をご紹介します。

BEMとは何か?:3つの要素で考える

BEMとは、Block, Element, Modifier の頭文字を取ったもので、CSSのクラス名を、以下の3つの構成要素の組み合わせで命名するという、非常にシンプルなルールです。

  • Block: ページを構成する、独立した大きな部品。(例: ヘッダー, 検索フォーム, 記事カード)
  • Element: そのBlockを構成する、小さな部品。(例: ヘッダーのロゴ, 検索フォームの入力欄, 記事カードのタイトル)
  • Modifier: BlockやElementの、見た目や状態の違いを表すもの。(例: 赤いボタン, 無効化されたボタン, 大きな記事カード)

BEMの具体的な書き方

BEMの魔法は、その独特なクラス名の繋ぎ方にあります。

  • BlockとElementは、アンダースコア2つ (`__`)で繋ぐ。
  • BlockやElementとModifierは、ハイフン2つ (`--`)で繋ぐ。

例:シンプルな「記事カード」をBEMで設計する

言葉だけだと分かりにくいので、具体的な例を見てみましょう。 以下のような、シンプルな「記事カード」コンポーネントを作るとします。

HTML構造:

<!-- Block: 記事カード全体 -->
<div class="card">
    <!-- Element: カードの画像 -->
    <img class="card__image" src="...">
    
    <!-- Element: カードの本文エリア -->
    <div class="card__body">
        <!-- Element: カードのタイトル -->
        <h3 class="card__title">記事のタイトル</h3>
        
        <!-- Element: カードのボタン -->
        <a href="#" class="card__button">続きを読む</a>

        <!-- Element: ボタン, Modifier: "primary"という見た目の違い -->
        <a href="#" class="card__button card__button--primary">もっと読む</a>
    </div>
</div>

CSS:

/* Block */
.card {
    border: 1px solid #ddd;
    border-radius: 8px;
}

/* Elements */
.card__image {
    width: 100%;
}
.card__title {
    font-size: 18px;
    margin: 0;
}
.card__button {
    display: inline-block;
    padding: 8px 12px;
    border: 1px solid #ccc;
}

/* Modifier */
.card__button--primary {
    background-color: #1a73e8;
    color: white;
    border-color: #1a73e8;
}

BEMがもたらす3つの絶大なメリット

1. クラス名が絶対に重複しない

.card__title というクラス名を見れば、それが「カードという部品の中のタイトル」であることが一目瞭然です。ページのメインタイトルである `.main__title` や、サイドバーのタイトル .sidebar__title と、名前が衝突することは絶対にありません。

2. スタイルが予測可能になる

--primary というModifierは、.card__button にしか影響を与えません。.card__button--primary の色を変えても、他のボタンの色が変わってしまう、という悪夢のような副作用から解放されます。

3. HTMLの構造が理解しやすくなる

クラス名を見るだけで、そのHTMLがどのような部品の入れ子構造になっているのかを、CSSファイルを開かなくても推測できるようになります。これは、チーム開発において絶大な効果を発揮します。

まとめ

BEMは、最初は少し冗長で、書くのが面倒に感じるかもしれません。 しかし、この小さな規律を守るだけで、あなたのCSSは驚くほど整理され、メンテナンスしやすく、そして再利用しやすい「資産」に変わります。

大規模なWebアプリケーションになればなるほど、このBEMという命名規則の真価が分かるはずです。 ぜひ、あなたの次のコンポーネントから、このシンプルで強力な設計手法を取り入れてみてください。

プログラミング学習に必須ツール!

記事で紹介したコードがよく分からなかったり、ご自身のコードについてもっと知りたい場合は、AIコード解説ツールが便利です。コードを貼り付けるだけで、AIが日本語で分かりやすく解説します。

AIコード解説ツールを使ってみる →

この記事を書いた人

ハンドルネーム:雲海 墨汁(うんかい ぼくじゅ)

プログラミング独学で挫折後、上京しWeb系企業に就職。4年間、主にバックエンド開発に従事し、
大規模サービスの設計から運用までを経験。
現在は、自身の学習経験を活かし、初心者向けのツール開発に情熱を注いでいる。

詳しいプロフィールを見る →
← ブログ一覧に戻る
このサイトについて ブログ 特定商取引法に基づく表記 プライバシーポリシー
© 2025 株式会社Serchcode . All Rights Reserved.