ボックスモデルとレイアウト
※このページには広告(PR)リンクが含まれます
🎯 このレッスンのゴール:最後の3問に答えられること
- width: 50%の要素を2つ横に並べ、paddingを付けたら折り返してしまいました。本文に沿った対策はどれですか。
- 上の段落にmargin-bottom: 30px、下の段落にmargin-top: 20pxを指定しました。2つの段落の間隔はどうなりますか。
- <span>にwidth: 100pxを指定しても幅が変わりません。本文に沿った対処はどれですか。
本文は約5分で読めます。先に問題を頭に入れてから読むと、答えの箇所が見つけやすくなります。
すぐに問題に挑戦する ↓ボックスモデル — content / padding / border / margin
HTMLのすべての要素は目に見えない「箱(ボックス)」として扱われます。この箱の構造を理解することが、CSSレイアウトを自在に操る第一歩です。ボックスモデルを理解しないと、「幅を200pxに設定したのに実際は244pxになった」「要素間のスペースが意図と違う」といった問題に悩まされます。このレッスンでは4層のボックス構造、box-sizing による計算方式の切り替え、そして縦方向のmarginで起きる「margin相殺」を徹底解説します。
ボックスモデルの4層構造
CSSボックスモデル:content / padding / border / margin
CSS のボックスモデルは内側から順に以下の4層で構成されます。
┌────────────────────────────────┐ ← margin(外余白)
│ ┌──────────────────────────┐ │ ← border(枠線)
│ │ ┌──────────────────┐ │ │ ← padding(内余白)
│ │ │ │ │ │
│ │ │ content │ │ │ ← コンテンツ領域
│ │ │ │ │ │
│ │ └──────────────────┘ │ │
│ └──────────────────────────┘ │
└────────────────────────────────┘
content(コンテンツ領域)
テキスト・画像・子要素が実際に表示される領域です。width と height プロパティで直接指定する領域です(box-sizing: content-box の場合)。
.box { width: 200px; height: 150px; }
padding(内余白)
コンテンツとボーダーの間のスペースです。背景色はpaddingまで広がります。
/* 全方向同じ値 */
.box { padding: 16px; }
/* 縦 | 横 の2値 */
.box { padding: 12px 24px; }
/* 上 | 右 | 下 | 左 の4値(時計回り) */
.box { padding: 8px 16px 8px 16px; }
/* 個別指定 */
.box { padding-top: 8px; padding-right: 16px; }
border(枠線)
paddingの外側を囲む枠線です。border: 太さ スタイル 色 の順で指定します。
.box { border: 2px solid #e5e7eb; }
.circle { border: 4px solid #2563eb; border-radius: 50%; }
主なborderスタイル: solid(実線)/ dashed(破線)/ dotted(点線)/ none(なし)
margin(外余白)
ボーダーの外側のスペースです。要素と要素の間隔を設定します。auto を使うと中央揃えができます。
.box { margin: 16px; }
.centered { width: 800px; margin: 0 auto; } /* 左右中央揃え */
.no-margin { margin: 0; }
💡 paddingとmarginの使い分け: コンテンツ内部の余白にはpadding、要素間のスペースにはmarginを使います。背景色はpaddingまで広がりますが、marginには広がりません。この違いが視覚的なデザインの意図と一致します。
box-sizing プロパティ
CSSの width と height がどこまでを含む幅かを決めるプロパティです。
content-box(デフォルト)
width / height は contentのみのサイズを指定します。実際の要素サイズは padding と border が加算されます。
.box {
box-sizing: content-box; /* デフォルト */
width: 200px;
padding: 20px;
border: 2px solid black;
/* 実際の幅: 200 + 20*2 + 2*2 = 244px */
}
border-box(推奨)
width / height に content + padding + border が含まれます。指定した幅がそのまま要素の占める幅になるため、直感的で設計しやすいです。
.box {
box-sizing: border-box; /* 推奨 */
width: 200px;
padding: 20px;
border: 2px solid black;
/* 実際の幅: 200px(変わらない) */
}
現代の CSS では以下のように全要素に border-box を適用するのが標準的です。
*, *::before, *::after {
box-sizing: border-box;
}
⚠️ 新規プロジェクトでは必ず
border-boxをリセットする:content-boxのままではwidth: 50%の要素が padding によって 50% を超え、意図しない改行やはみ出しが発生します。CSSリセットの冒頭にこの1行を入れることが業界標準です。
margin 相殺(Margin Collapsing)
隣接するブロック要素の縦方向(top / bottom)のmarginは、大きい方の値のみが採用されます。これを「margin相殺」または「マージンコラプス」と呼びます。
基本的な相殺の例
<p class="a">段落A</p>
<p class="b">段落B</p>
.a { margin-bottom: 30px; }
.b { margin-top: 20px; }
/* 実際の間隔: max(30, 20) = 30px */
30 + 20 = 50px になると思いがちですが、実際は 30px になります。
相殺が起きる条件
| 条件 | 詳細 |
|---|---|
| 隣接するブロック要素 | 縦方向に隣接する場合のみ相殺 |
| 親子間のmargin | 親に border/padding がない場合、子のmarginが親を突き抜ける |
| 空要素の自己相殺 | contentも padding/borderもない要素は上下marginが相殺される |
相殺が起きない条件
- ◆横方向(left / right) のmarginは相殺されない
- ◆Flexboxコンテナの子要素 は相殺されない
- ◆Gridコンテナの子要素 も相殺されない
- ◆親要素に
overflow: hiddendisplay: flow-rootなどが設定されている場合も相殺されない
/* 親子間の相殺を防ぐ */
.parent { padding-top: 1px; } /* わずかなpaddingでOK */
.parent { overflow: hidden; }
.parent { display: flow-root; } /* 最も意味的に正確 */
💡 Flexboxを使えばmargin相殺を気にしなくて済む: Flexboxのコンテナ内では子要素間のmargin相殺は発生しません。現代のレイアウトではFlexboxやGrid、そして
gapプロパティを使うことで、margin相殺による混乱を避けられます。
ブロック要素とインライン要素のボックスモデル
要素の display プロパティによってボックスモデルの挙動が変わります。
| display | 挙動 | width/height | padding/margin |
|---|---|---|---|
block | 行全体を占有 | 有効 | 全方向有効 |
inline | コンテンツ幅のみ | 無効 | 左右のみ有効 |
inline-block | インライン配置 + ブロック特性 | 有効 | 全方向有効 |
flex | フレックスコンテナ | 有効 | 全方向有効 |
インライン要素(<span>, <a> など)に width を指定しても効かない理由がここにあります。display: inline-block に変更することで幅・高さを指定できます。
span { display: inline-block; width: 100px; padding: 8px 16px; }
DevTools でボックスモデルを確認する
Chrome / Edge の DevTools(F12)では、選択した要素のボックスモデルを視覚的に確認できます。
- ◆F12 → Elements パネルを開く
- ◆要素を選択する
- ◆右側の「Computed」タブを開く
- ◆上部にボックスモデル図が表示される(margin / border / padding / content のサイズが数値で確認できる)
⚠️ DevToolsで確認しながら開発する: 「なぜかサイズがズレる」「余白が意図と違う」という問題の9割はボックスモデルの計算ミスです。コードを書きながらDevToolsのボックスモデル図を常に確認する習慣が、フロントエンド開発スキルを最速で上げるコツです。
🏋️実践ワーク
以下のワークを実施してください。
- ◆box-sizingの比較:
content-boxとborder-boxの両方でwidth: 200px; padding: 20px; border: 2px solid black;を設定し、実際にブラウザで表示されるサイズをDevToolsで計測してください。 - ◆margin相殺の確認: 2つの
<p>要素に異なるmarginを設定し、実際の間隔をDevToolsで確認してください。次に親要素にdisplay: flow-rootを追加して相殺が解消されることを確認してください。 - ◆中央揃えの実装: 幅800pxのコンテナを
margin: 0 autoで画面中央に配置し、ウィンドウ幅を変えても中央に保たれることを確認してください。 - ◆inline-blockの活用:
<span>要素にデフォルト状態でwidthを設定し効かないことを確認後、display: inline-blockに変更して有効になることを確認してください。
📝まとめ
ボックスモデルはcontent・padding・border・marginの4層で構成され、すべてのHTML要素に適用されます。box-sizing: border-box を全要素に適用するのが現代の標準で、これにより width 指定と実際の表示幅が一致します。縦方向の隣接するmarginは相殺が発生し、大きい方だけが採用されます。Flexbox / Grid の子要素では相殺が起きないため、現代的なレイアウト手法の方が予測しやすいです。DevToolsのボックスモデル表示を活用し、常に実際の値を確認しながら開発しましょう。次のレッスンでは Flexbox を使った実践的なレイアウト技法を学びます。
理解度チェック
3問全問正解でこのレッスンが「完了」になり、コースの全レッスンを完了すると修了証が発行されます。何度でも挑戦でき、全問正解すると全問の解説が読めます(不正解のときは正解した問題の数だけ表示され、30秒後に答え直せます)。
Q1.width: 50%の要素を2つ横に並べ、paddingを付けたら折り返してしまいました。本文に沿った対策はどれですか。
Q2.上の段落にmargin-bottom: 30px、下の段落にmargin-top: 20pxを指定しました。2つの段落の間隔はどうなりますか。
Q3.<span>にwidth: 100pxを指定しても幅が変わりません。本文に沿った対処はどれですか。
「HTML/CSSコーディング入門」全10レッスンを無料で修了しよう
- ✓ 理解度チェックの採点と、合格レッスンの記録
- ✓ 全レッスン合格で修了証を発行(URLでシェア・LinkedInに追加できます)
- ✓ 全レッスンの解説動画と、続きから再開できる学習ダッシュボード
完全無料・クレジットカード不要
このレッスンで使うツール・次の学び方 PR
Audible(Amazonのオーディオブック) ↗ビジネス書・マーケティングの本を通勤中や家事の合間に聴いて学べる。プレミアムプランは30日間の無料体験あり(2026年11月時点)

関連するブログ記事
関連レッスン(他のコースから)
実践Webデザイン - Figma完全マスター講座
Auto Layoutで効率的なレイアウト
Auto LayoutはFigmaが他のデザインツールと一線を画す最大の機能です。
30分本文は無料で閲覧可
デザイン基礎 - 視覚コミュニケーション入門
レイアウトとグリッドシステム
レイアウトはデザインの「骨格」です。
35分本文は無料で閲覧可
WordPress HP制作完全講座
ブロックエディタ完全活用
WordPress 5.0から標準搭載されたブロックエディタ(Gutenberg)は、ドラッグ&ドロップとブロックの組み合わせでリッチなコン
30分本文は無料で閲覧可
WordPress HP制作完全講座
ホームページの役割と企画
ホームページ(HP)を作る前に最も重要なのが「なぜ作るのか」という目的の明確化です。
30分無料公開
WordPress HP制作完全講座
サーバー・ドメインの選び方
WordPressでHPを公開するには、サーバー(サイトのデータを保存・配信する場所) と ドメイン(サイトのアドレス) の2つが必要です。
30分無料公開
WordPress HP制作完全講座
WordPressインストールと初期設定
サーバーとドメインの準備が整ったら、いよいよWordPressのインストールです。
30分無料公開
レッスン一覧
各レッスンの理解度チェックに合格すると ✓ がつきます