全ての要素にクラスをつけよう-CSS設計とコンポーネント指向への第一歩-

目次

はじめに

HTMLコーディングにおいて、クラス名ってどうしていますか?全部の要素につけていますか?それとも、大枠だけですか?

基本的に小規模であれWEBサイトのコーディングをするなら、「bodyタグ内のすべての要素にクラスを付ける」というアプローチがおすすめです。

なぜ「すべての要素」にクラスを付けるのか?

理由は大きく分けて2つあります。
それは、HTMLの品質向上将来へのスキル投資です。


1. HTMLが「構造を持ったドキュメント」になる

クラス名が付与されていないHTMLは、どうしても単なるタグの羅列になりがちです。

一方で、すべての要素に適切なクラス名(例:about-title、author-name、news-date)が付いていれば、CSSを見なくてもHTMLだけで要素の役割が理解できます。

それから、ここはクラス名をつけるのか。ここはつけないのか。その選択肢を無くすことでもあります。選択肢が少なくなればそれだけスピードが上がります。


2. BEM・FLOCSS、そしてコンポーネント指向への布石

ここが、最も重要なポイントです。

BEM / FLOCSSの基礎体力になる

BEM(Block, Element, Modifier)やFLOCSSといったCSS設計手法は、クラスを前提として構造を管理する思想です。
特にBEMでは、親要素(Block)の内部に存在する子要素(Element)すべてに、明確な命名を行います。

つまり、
「すべての要素に名前を付ける」という習慣そのものが、CSS設計の基礎体力になります。

コンポーネント指向への接続

ReactやVue.jsなどのフレームワークでは、UIを「コンポーネント」という単位で設計します。
コンポーネント内部の要素は、すべてそのコンポーネントの責務として振る舞います。

「この要素は、何の役割を持つパーツなのか?」

そう問い続けながら命名する習慣は、コンポーネント設計そのもののトレーニングになります。

CSSフレームワークへの適応

Utility FirstなCSSフレームワークも、本質的にはすべての要素にクラスを書いていくスタイルです。
HTMLに多くのクラスを書くことに抵抗がない状態を作っておくことは、モダンな開発環境への適応力を高めてくれます。


実践ルール:構造を語るクラス名

では、具体的にどのようなルールでクラスを付けていけばよいのでしょうか。

基本ルール

  • 命名規則:ケバブケース(kebab-case)を使用する
  • 対象範囲body タグ内の要素には、ごく一部の例外を除き、すべてクラスを付ける
  • 意味付け:見た目(red-text)ではなく、役割(error-message)を表す名前にする

コード例

<!-- 悪い例:構造が見えにくい -->
<div class="card">
  <h3>タイトル</h3>
  <p>説明文です。<a href="#">リンク</a></p>
  <img src="icon.png" alt="">
</div>

<!-- 良い例:役割が明確 -->
<div class="feature-card">
  <h3 class="feature-card-title">高速なパフォーマンス</h3>
  <p class="feature-card-description">
    最適化されたコードにより…
    <a href="#" class="feature-card-link">詳細を見る</a>
  </p>
  <img src="icon-speed.png" alt="" class="feature-card-icon">
</div>

後者の例では、feature-card というブロックの中に、どのような要素が存在しているのかが、HTMLを読むだけで明確に把握できます


例外ルール

「すべて」と言いましたが、設計の一貫性を保つために、例外も存在します。

1. br タグ

br タグは、構造を表す要素ではなく、単なる改行を目的としたタグです。
そのため、構造的な意味を持たせる必要はなく、原則としてクラスは不要です。

ただし、sp-onlypc-only のように、表示条件を切り替える目的を持つヘルパークラスを付与するケースはあります。
この場合、クラスは要素の役割を表すものではなく、振る舞いを制御するための補助的な役割を担います。

2. iframe タグ

動画埋め込みなどでは、まず Wrapper(親要素) を起点にレイアウトを制御する設計が一般的です。
この点は img タグと同様で、iframe 自体の役割は文脈上すでに明確なため、必ずしもクラスを付ける必要はありません

また、iframe は Google Maps や YouTube など、外部サービスが提供するコードをそのままコピー&ペーストして使用するケースが多く、その場合はクラスを追加しないことも少なくありません。

<div class="youtube-embed-wrapper">
  <iframe src="..." allowfullscreen></iframe>
</div>

必要に応じて iframe 本体に width: 100%height: autoaspect-ratio などを指定したい場合でも、Wrapper 側を起点に制御する設計を基本とすると、構造が崩れにくくなります。
この場合、Wrapperには必ずクラスを付けるようにしましょう。

3. img タグ

基本的にはクラスを付けることを推奨します。
ただし、画像表示専用のコンテナで役割が明確に限定されている場合、その直下の img は文脈が明らかなため、省略しても問題ありません。

もっとも、CSS設計の観点からは、クラスを付けておく方が安全です。


まとめ

「すべての要素にクラスを付ける」という考え方は、最初は手間に感じるかもしれません。
しかしそれは、
「とりあえず動けばいいコード」から、
管理しやすく、読みやすいプロフェッショナルなコードへ進むための第一歩
です。

未来の大規模開発やチーム制作に備えて、まずは日々の小さな制作物の中で、この習慣を意識してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次