113
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【35歳未経験でも理解できた】破綻しないCSS設計の基本

113
Last updated at Posted at 2026-03-31

こんにちは!
気づけば35歳、未経験からWeb開発の世界に飛び込んだ者です。

ヘッダーの余白を少し直しただけなのに、なぜか遠く離れたフッターが崩壊する。直せば直すほど他の場所が壊れていく。「これ、CSSじゃなくてジェンガかな?」と何度も心が折れかけました。

しかし、ある本を読んでから少しずつ霧が晴れてきました

この記事では、自分でも理解できた内容をベースに、「破綻しないCSS設計の考え方」をお届けします。

参考書籍:

  • 谷 拓樹『Web制作者のためのCSS設計の教科書 モダンWeb開発に欠かせない「修正しやすいCSS」の設計手法』(2014)

この記事の対象者

  • CSSの基本(セレクタやプロパティ)は書けるようになった方
  • クラス名の付け方にいつも迷って、最終的に box1 とか付けちゃう方
  • CSS設計(BEM / FLOCSS)の基礎を知りたい方

1. 目指すべき「より良いCSS」の4つのゴール

良いCSSアーキテクチャには、以下の4つの特徴があります。

  • 🔮 予測しやすい
    ルール通りに機能し、新しく追加したスタイルが他に悪影響(謎のレイアウト崩れ等)を与えない。
  • ♻️ 再利用しやすい
    抽象的に作られており、他に似たようなUIが登場した際、コードをコピペせずに再利用できる。
  • 🛡 保守しやすい
    新しいデザインが加わっても、既存のCSSを震える手で恐る恐る触る必要がない。
  • 📈 拡張しやすい
    サイトの規模が大きくなり、メンバーが増えても「ここは俺の管轄外だ」とならない。

この4つのゴールに近づくための強力なアプローチが「コンポーネント設計」です。


2. コンポーネント設計とは?

コンポーネント設計とは、UIを「独立した部品(コンポーネント)」として考えて設計する手法です。
機能や振る舞いを明確に分離し、「HTMLの構造に極力依存させずにスタイルを作る」ことが重要です。

実生活で例えるなら、「実家暮らしで親のルールに縛られている状態」から「一人暮らしで完全に自立した状態」にするイメージです。

❌ 悪い例:HTML構造に依存したCSS(実家暮らし)

親(.sidebar)や実家(ul li)に依存しているため、引っ越す(HTML構造が変わる)とスタイルがなくなる

.sidebar ul li a {
  color: #333;
  background-color: #eee;
}

⭕️ 良い例:コンポーネントとして独立したCSS(一人暮らし)

クラス名単体で機能するため、どこに引っ越しても(配置されても)自分のスタイルを貫ける

.c-nav-link {
  color: blue;
}

3. 【重要】BEM(命名規則)をマスターする

コンポーネント設計を実現するために、現場で広く使われているクラス名のルールが「BEM(ベム)」です。
※妖怪人間ではありません。

UIを以下の3つに分類して名前をつける手法です。

種類 役割 繋ぎ方のルール
Block コンポーネントの
大枠
なし .c-card
.c-button
Element ブロックを
構成する要素
アンダースコア2つ
__
.c-card__title
Modifier ブロックや要素の
バリエーション
ハイフン2つ
--
.c-button--danger

最初はこの __ とか -- を見て「顔文字かな?」と思いましたが、慣れると非常に合理的です。

💻 BEMの実践コード(記事カードとボタン)

BEMの3要素(Block, Element, Modifier)がどう使われるか、実際のコードで確認しましょう。

<!-- 【Block】コンポーネントの大枠 -->
<article class="c-card">
  
  <!-- 【Element】構成要素(__で繋ぐ) -->
  <h2 class="c-card__title">CSS設計の基本</h2>
  <p class="c-card__text">BEMを学ぶと世界が変わります。</p>

  <!-- 【Block】独立したボタン -->
  <button class="c-button">通常ボタン</button>
  
  <!-- 【Modifier】バリエーション(--で繋ぐ) -->
  <button class="c-button c-button--danger">削除ボタン</button>

</article>
/* 【Block】基準となるスタイル */
.c-button {
  padding: 10px 20px;
  background-color: #eee;
  border-radius: 4px;
}

/* 【Modifier】変化する部分(差分)だけを書く */
.c-button--danger {
  background-color: #ff4d4f; /* 赤色で上書き */
  color: #fff;
}

💡 ここがポイント!
命名ルールを統一することで、「これはカードのタイトルだな」「これは危険な(赤い)ボタンだな」と、HTMLを見るだけでCSSの役割が一目で予測できるようになります。


4. FLOCSSでファイルを美しく整理する

BEMが「名前の付け方」のルールなら、FLOCSS(フロックス)は「住む場所(ファイルの分け方・配置場所)」のルールです。

FLOCSSでは、CSSを主に以下の層に分けて管理します。

  1. Foundation(基盤)
    ブラウザの初期スタイルをリセットするCSSや、全体の背景色など。建物の基礎工事。
  2. Layout(レイアウト)
    ヘッダー、フッター、サイドバーなど、ページの大枠の配置を決める要素。建物の骨組み。
  3. Object(オブジェクト)
    BEMを使って命名される、再利用可能なコンポーネント群(ボタン、カードなど)。建物の中の家具。

BEM(名前)とFLOCSS(住所)を組み合わせることで、「名前が被らない」「どこに何が書かれているか一瞬でわかる」CSS環境が完成します。


5. 最適化を焦らない「3回の法則」

ここまでコンポーネント化の重要性を語りましたが、最後に心得をお伝えします。
それは、

「最初からあらゆる場面で使い回せる『汎用コンポーネント』を作ろうとしないこと」です。

プログラミングには「3回繰り返したものは、パターンとして成立する(Rule of Three)」という考え方があります。

  • 1回目: 初めてそのUIが登場した時は、再利用なんて考えずに書く。
  • 2回目: 似たようなUIが登場しても、コンポーネント化したくなる気持ちをグッと抑える(修行)。
  • 3回目: ここで初めて「これは完全に共通パターンだ!」と確信し、リファクタリング(コードの整理)を決行する。
- /* 1回目、2回目はそれぞれの場所にベタ書きする */
- .top-page-btn { ... }
- .about-page-btn { ... }

+ /* 3回目で共通化し、BEMでコンポーネントにする */
+ .c-button { ... }

まとめ

  • 「予測・再利用・保守・拡張」しやすいのが「より良いCSS」

  • コンポーネントは親に依存させず「一人暮らし(独立)」させる

  • BEMは「名前の付け方」、FLOCSSは「住む場所の決め方」

  • 最初から完璧を求めず、「3回の法則」でリファクタリングする

CSS設計は、知っているだけで日々のコーディングのストレスを大きく減らしてくれます。未経験からの挑戦は覚えることが多くて大変ですが、一つひとつの技術の「なぜそれが必要なのか」を理解することで確実に成長できます。

「CSSを直したら関係ないところが崩れた!」と頭を抱える夜を減らすために、ぜひ次のコーディングからBEMを取り入れてみてください!

113
59
1

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
113
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?