sectionとdivの違いとは?HTMLにおける使い分けとセマンティック設計の基本

備忘録

はじめに

HTMLを書いていると、こうなる。

ここ、まとまりっぽいから <section>
いや、CSS当てたいだけだから <div>
結局どっちでも表示は同じだし、迷うだけでは…?

表示だけ見れば差はほぼ出ない。だが、意味が違う。意味が違うと、アクセシビリティ、ドキュメント構造、保守性に影響してくる。

この記事では、<section><div> の違いを、仕様の考え方に寄せつつ、現場で迷わないための判断基準として落とし込む。


スポンサーリンク
スポンサーリンク

結論:section は「主題のまとまり」、div は「意味なしの箱」

  • <section>同じテーマ(主題)でまとまったコンテンツの塊を表す。基本、見出し(h1h6)とセットで使う。
    ページのアウトラインに載ってほしい塊」向き。
  • <div>意味を持たない汎用コンテナ。スタイリングやJSの都合で包むための箱。
    意味は増やさず、まとめたいだけ」向き。

ここで大事なのは「どっちも囲えるから同じ」ではなく、囲った結果として機械(支援技術・解析ツール・開発者)が受け取る意味が違うという点。


手順

ステップ1:その塊、見出しを付けて説明できるかを自問する

まず自分に聞く。

  • このブロック、見出しを付けるとしたら何て名前になる?
  • その見出し、ページ内の目次(アウトライン)に載っても自然?

YESなら <section> を検討する。
NOなら <div> で済むケースが多い。

例:section が合うケース

<section>
  <h2>料金プラン</h2>
  <p>無料・Pro・Enterpriseの3種類。</p>
</section>

<section>
  <h2>よくある質問</h2>
  <ul>
    <li>解約はいつでも可能か</li>
    <li>請求書払いはできるか</li>
  </ul>
</section>

料金プラン」「よくある質問」みたいに、主題が明確で、見出しが自然に付く。


ステップ2:目的が「見た目」か「意味」かを切り分ける

迷いの9割はこれ。

  • CSSを当てるために包みたい
  • Grid/Flexの都合で一段ラップが必要
  • JSで掴みやすくしたい

この手の理由なら、基本は <div>

<section>
  <h2>ニュース</h2>

  <div class="news-grid">
    <article>...</article>
    <article>...</article>
    <article>...</article>
  </div>
</section>

ニュース自体は section。
レイアウト用の箱は div。
役割が分かれているから、読んだ瞬間に意図が伝わる。


ステップ3:「セマンティック要素があるのに section を使ってないか」を確認する

<section> は便利だが万能ではない。HTMLには「意味付きの専用タグ」が他にもある。

よくある置き換え候補はこのあたり。

やりたいこと 使う候補
独立した記事・投稿・エントリ <article>
サイト内ナビゲーション <nav>
補足情報・サイドバー <aside>
ページの主要コンテンツ <main>
ヘッダー領域 <header>
フッター領域 <footer>

とりあえず section」になりがちな現場ほど、のちのちHTMLが読みにくくなる。
専用タグがあるならそっち優先、残りを section、最後に div、という順が強い。


ステップ4:アクセシビリティ視点で「名前」を付ける

<section> は「主題のまとまり」だが、支援技術が扱いやすい形にするには、セクションに名前が必要になる場面がある(ランドマーク的なナビゲーションで効く)。

基本は見出しをセットにする。

<section aria-labelledby="intro-title">
  <h2 id="intro-title">導入</h2>
  <p>このページの目的は〜</p>
</section>

見出しがないのに section を置くと、ただの箱になってしまう。
それなら div でよい。いや、むしろ div のほうが誠実。


ステップ5:よくある誤解を潰す(ここが当惑ポイント)

誤解1:div も「セクション」じゃないのか

囲ってるんだからセクションっぽい」感覚は分かる。だがHTMLの世界では、“セクションを作った” という意味が付くかが重要になる。divは意味を付けない。

誤解2:section をネストすると見出しサイズが変わる?

昔、一部ブラウザが「アウトラインに合わせて h1 を縮める」ような挙動を見せた時期がある。だが、見出しの見た目はCSSで制御する領域だし、今は挙動も統一的ではない。
実務では、見出しレベルは文書構造に合わせて付ける。見た目はCSSで付ける。ここを混ぜると事故る。


迷ったら使うチェックリスト

  • このブロックは「テーマ」が一言で言える → section寄り
  • 見出し(h2など)を付けると自然 → section寄り
  • 目次に載っても違和感がない → section寄り
  • 目的はレイアウト調整・JSフックだけ → div
  • 適切な専用タグ(article/nav/aside/main)が存在 → それを優先
  • 見出しも名前付けもない section → divに戻す

まとめ

<section><div> の違いは「見た目」ではなく「意味」にある。

  • section:主題でまとまったコンテンツ。見出しと相性が良い
  • div:意味を持たない箱。スタイルやスクリプト都合のラッパー

HTMLのセマンティック要素を丁寧に使うと、コードが読みやすくなる。チーム開発で効く。将来の自分にも効く。
次に迷ったら、「それはページのアウトラインに載る塊か?」と自分に聞く。YESなら section、NOなら div。これで迷いが一段減るはず。

コメント