divとspanの違いが分からない
💬 質問
HTMLの div と span の使い分けがわかりません。どちらも「囲むだけ」のタグに見えるのですが、何が違うのでしょうか?
✅ 回答
どちらも「意味を持たない汎用タグ」ですが、表示のされ方が根本的に違います。
一言で言うと
| div | span | |
|---|---|---|
| 種類 | ブロック要素 | インライン要素 |
| 改行 | 前後に改行が入る | 改行されない |
| 幅 | 親要素の横幅いっぱい | 中身の幅だけ |
| 例え | 段ボール箱 | マーカーペン |
| 用途 | レイアウトのまとまり | 文中の一部を装飾 |
コードで確認
<!-- div:ブロック要素(前後に改行が入る) -->
<div style="background: lightblue; padding: 10px;">
これは1つ目のブロック
</div>
<div style="background: lightyellow; padding: 10px;">
これは2つ目のブロック(次の行に表示される)
</div>
<!-- span:インライン要素(文の流れの中に入る) -->
<p>
この文章の<span style="color: red;">ここだけ赤く</span>できます。
改行されません。
</p> 使い分けの判断基準
- 「このまとまりを1つの箱として扱いたい」→
div - 「文章の中の一部分だけスタイルを変えたい」→
span - 「ヘッダー/ナビ/メインなど意味がある」→ セマンティックタグ(header, nav, main)
学園祭サイトでの使い分け例
<div class="card">— 出し物カード全体を囲む<div class="card-list">— カード一覧のレイアウト用<span class="badge">人気</span>— カード内の「人気」ラベル<span class="highlight">残りわずか</span>— 文中の強調
よくある間違い
- ❌ spanにwidth/heightを指定する → インライン要素には効かない(display: blockが必要)
- ❌ 全部divで囲む → 意味のあるタグ(header, section等)を使うべき
- ❌ divの中にdivを10段ネスト → 構造を見直すサイン
使い分けの実例
<!-- div: ブロック要素(横幅いっぱい、前後に改行) -->
<div class="card">
<h2>タイトル</h2>
<p>説明文</p>
</div>
<!-- span: インライン要素(テキストの一部を装飾) -->
<p>この<span class="highlight">重要な部分</span>だけ色を変えたい</p>
<!-- ❌ よくある間違い: spanでレイアウトを作ろうとする -->
<span class="container">...</span> <!-- widthやheightが効かない -->
<!-- ✅ レイアウトにはdiv(またはセマンティックタグ)を使う -->
<div class="container">...</div>
<section class="hero">...</section> 覚え方:div = 箱(レイアウト用)、span = マーカー(テキスト装飾用)。迷ったらdivを使えばOK。
解決しなかった?
エンジニアに質問する →