ボックスモデルとは
Webページの全ての要素は「ボックス」として扱われており、このボックスは4つの領域で構成されています。この仕組みをボックスモデルと呼びます。
(コンテンツ領域)
テキストや画像
margin → border → padding → content
の順序で配置
↓
ボックスモデルの構成
ボックスモデルは外側から内側に向かって、以下の4つの領域で構成されています。
- マージン(margin) 他の要素との間の外側余白
- ボーダー(border) 要素の境界線
- パディング(padding) コンテンツと枠線の間の内側余白
- コンテンツ(content) 実際のテキストや画像が表示される領域
コード例
以下は、ボックスモデルの各領域を設定するCSSコード例です。
/* ボックスモデルの各領域を設定 */
.box {
margin: 20px; /* 外側余白 */
border: 5px solid #F0E68C; /* 枠線 */
padding: 15px; /* 内側余白 */
} 対応するHTML:
<div class="box">
コンテンツ領域 色なし
</div>
<div class="box">
コンテンツ領域 色付き
</div> 試してみよう
実際にボックスモデルを視覚的に確認してみましょう。以下のコードエディタで、boxクラスのmarginとpadding、borderの値を変更して、要素の見た目がどのように変わるか試してみてください。
2つのボックスに分けて、片方のコンテンツ領域には背景色を付けています。これにより、paddingの内側余白がより明確になり、marginとの違いが視覚的に理解しやすくなります。
margin(外側余白)の基本
marginは要素の外側に空間を作るプロパティです。他の要素との間隔を調整したり、要素をページ内で配置したりする際に使用します。
marginの基本的な書き方
marginプロパティには、大きく分けて2つの指定方法があります。
個別指定
上下左右の余白をそれぞれ個別に指定する方法です。細かく調整したい場合に適しています。
/* 個別指定の書き方 */
.box {
margin-top: 10px; /* 上の余白 */
margin-right: 20px; /* 右の余白 */
margin-bottom: 30px; /* 下の余白 */
margin-left: 40px; /* 左の余白 */
} 省略記法
marginは値の個数によって、異なる意味を持ちます。この省略記法を覚えると、効率的にCSSを書けるようになります。
- 1つの値 全方向(上下左右)に同じ余白
- 2つの値 1つ目が上下、2つ目が左右の余白
- 3つの値 1つ目が上、2つ目が左右、3つ目が下の余白
- 4つの値 上、右、下、左の順(時計回り)の余白
/* 省略記法の例 */
.box-1 { margin: 20px; } /* 全方向20px */
.box-2 { margin: 10px 20px; } /* 上下10px、左右20px */
.box-3 { margin: 10px 20px 30px; } /* 上10px、左右20px、下30px */
.box-4 { margin: 10px 20px 30px 40px; } /* 上10px、右20px、下30px、左40px */ marginの実践例
以下のエディタでmarginの効果を実際に確認してみましょう。異なるmargin値を試して、要素間の距離がどのように変化するか観察してください。
margin: autoの活用
marginの最も便利で実用的な機能がauto値による中央寄せです。Webデザインでは非常によく使われる技術です。
/* 要素を中央寄せ(最も一般的) */
.center-box {
width: 200px;
margin: 0 auto; /* 上下0、左右auto */
}
/* 個別指定での中央寄せ */
.center-box-individual {
width: 200px;
margin-left: auto;
margin-right: auto;
} margin: autoの実例
最も実用的な中央寄せパターンを確認してみましょう。
marginには他の余白プロパティとは異なる重要な特徴があります。
- 負の値が使用可能 マイナス値で要素を重ねることができる
- マージンの相殺 隣接する要素のmarginが重なる場合がある
- インライン要素では上下margin無効 インライン要素では左右のmarginのみ有効
これらの特徴を理解することで、marginをより効果的に活用できるようになります。
padding(内側余白)の基本
paddingは要素の内側に空間を作るプロパティです。コンテンツと境界線(border)の間に余白を設定し、要素内部のスペースを調整します。
paddingの基本的な書き方
paddingプロパティも、marginと同様に2つの指定方法があります。
個別指定
上下左右のpadding(内側余白)をそれぞれ個別に指定する方法です。細かく調整したい場合に適しています。
/* 個別指定の書き方 */
.box {
padding-top: 10px; /* 上の内側余白 */
padding-right: 20px; /* 右の内側余白 */
padding-bottom: 30px; /* 下の内側余白 */
padding-left: 40px; /* 左の内側余白 */
} 省略記法
paddingの省略記法はmarginと全く同じルールです。値の個数によって異なる意味を持ちます。
- 1つの値 全方向(上下左右)に同じ内側余白
- 2つの値 1つ目が上下、2つ目が左右の内側余白
- 3つの値 1つ目が上、2つ目が左右、3つ目が下の内側余白
- 4つの値 上、右、下、左の順(時計回り)の内側余白
/* 省略記法の例 */
.box-1 { padding: 20px; } /* 全方向20px */
.box-2 { padding: 10px 20px; } /* 上下10px、左右20px */
.box-3 { padding: 10px 20px 30px; } /* 上10px、左右20px、下30px */
.box-4 { padding: 10px 20px 30px 40px; } /* 上10px、右20px、下30px、左40px */ paddingの実践例
以下のエディタでpaddingの効果を実際に確認してみましょう。異なるpadding値を試して、要素内部の余白がどのように変化するか観察してください。
paddingの背景色適用例
paddingには背景色が適用される点も重要な特徴です。以下の例で、paddingの有無による背景色の違いを確認してみましょう。
paddingには他の余白プロパティとは異なる重要な特徴があります。
- 負の値は使用不可 paddingにはマイナス値を設定できない
- auto値は使用不可 paddingにauto値を指定することはできない
- インライン要素でも上下padding有効 インライン要素でも上下のpaddingが適用される
これらの特徴を理解することで、paddingをより効果的に活用できるようになります。
marginとpaddingの使い分け
使い分けの基本原則
marginとpaddingの使い分けは、何のための余白なのかを考えることが重要です。
- margin 他の要素との距離を調整したい場合(要素間の余白)
- padding 要素内のコンテンツと境界との距離を調整したい場合(要素内の余白)
- クリックエリア拡大 ボタンなどのクリック可能領域を広げたい場合はpadding
- 中央寄せ 要素をページの中央に配置したい場合はmargin: auto
実践的な使い分け例
実際のWebデザインでよく使われるパターンを見てみましょう。以下の例で、marginとpaddingがどのように使い分けられているか確認してください。
上の例でbutton要素がwidth指定なしでmargin: 0 autoによる中央寄せができているのは、button要素の特殊な性質によるものです。
- 通常のブロック要素
display: blockでは横幅100%が基本。→このままではmargin: 0 autoは効果が出ない - フォーム要素(buttonなど) 既定でコンテンツに合わせた幅になることが多い。→
width未指定でもmargin: 0 autoで中央寄せされる場合がある
そのため、button要素はwidthを明示しなくても中央寄せできることがあります。これはその他のフォーム要素(input, select, textareaなど)でも見られます。
一方、一般的なdivなどでは中央寄せにwidth指定が必要という原則は変わりません。
値の単位と特別な値
使用できる単位
marginとpaddingには、CSSで使用できる様々な長さの単位を指定できます。実際のWeb開発では、以下の単位が主に使用されています。
よく使われる単位(推奨)
- px(ピクセル) 固定サイズ。細かい調整や境界線に適している
- rem ルート要素のフォントサイズ基準。最も推奨される相対単位
- %(パーセント) 親要素の幅基準。marginでレイアウト分割に使用
- vw、vh 画面サイズ基準。大胆なレスポンシブデザインで使用
特殊な場面で使われる単位
- em 親要素のフォントサイズ基準。コンポーネント内の相対的な余白で使用
- vmin、vmax 画面の最小・最大寸法基準。高度なレスポンシブ対応
Web開発では使用しない単位
- pt、cm、mm、in 印刷媒体用の物理単位。Webでは推奨されない
実用例の比較
以下のエディタで、異なる単位がどのように動作するか確認してみましょう。
実際のプロジェクトでの単位選択の指針です。
- px 精密な制御が必要な場合(細い境界線、アイコン周辺など)
- rem 基本的な余白設定。フォントサイズと連動して自然にスケールする
- em コンポーネント内の相対的な余白。フォントサイズに比例した余白が欲しい場合
- % 親要素に対する相対的な配置。marginの左右指定で使用
- vw/vh 画面サイズに連動した余白。大胆なレスポンシブデザインで使用
paddingの%使用時の注意:paddingの%は親要素の幅を基準とするため、意図しない動作をする場合があります。一般的にremやemの使用を推奨します。
特別な値(autoと負の値)
marginとpaddingには、数値以外の特別な値も指定できます。
margin: autoによる自動配置
margin: autoは、利用可能な空間を自動的に計算して配分します。先の中央寄せ以外にも、要素の右寄せや左寄せにも応用できます。
/* 基本的な中央寄せ */
.center {
width: 200px;
margin: 0 auto; /* 上下0、左右auto */
}
/* 右寄せ */
.right-align {
width: 200px;
margin-left: auto; /* 左側に最大余白 */
}
/* 左寄せ(デフォルトと同じ) */
.left-align {
width: 200px;
margin-right: auto; /* 右側に最大余白 */
} marginの負の値による重複配置
marginには負の値を指定でき、要素を重ねたり特殊な配置ができます。
.box1 {
margin-bottom: 10px;
}
/* 負のmarginで要素を重ねる */
.box2 {
margin-top: -20px;
} 実際の例
以下のエディタで、auto指定による右寄せと、負のmarginによる要素の重なりを確認してみましょう。
要素のサイズ計算とbox-sizing
要素サイズ計算の基本
CSSのデフォルトでは、widthはコンテンツ領域の幅のみを表します。そのため、paddingやborderが追加されると、要素の実際の幅と高さは指定した値より大きくなるので注意が必要です。
計算式
- 実際の幅 = width + padding(左右) + border(左右)
- 実際の高さ = height + padding(上下) + border(上下)
よくある勘違い:カードレイアウトの失敗例
実際のWebサイト制作でよくある失敗例を見てみましょう。
「幅200pxの親要素に100pxずつのカードを2つ並べる」という一見簡単そうなレイアウトが、なぜうまくいかないのかを確認してください。
<div class="parent">
<div class="card">カード1</div>
<div class="card">カード2</div>
</div> デフォルト計算方式
上記の例では、.card要素が指定したwidth(100px)より実際には大きくなっています。
- コンテンツ領域 100px(width指定)
- padding領域 20px(左右合計40px)
- border領域 2px(左右合計4px)
- 実際の要素幅 100px + 40px + 4px = 144px
このため、2つのカードを横に並べると、144px × 2 = 288pxとなり、親要素の200pxを大きく超えてしまいます。
box-sizingプロパティによる解決
box-sizing: border-boxを指定すると、widthとheightがpaddingとborderを含んだ全体サイズを表すようになります。これにより、より直感的なサイズ計算が可能になります。
設定例
.card {
box-sizing: border-box;
width: 100px;
padding: 20px;
border: 2px solid #999;
} box-sizingの種類
- content-box(デフォルト)
width/heightはコンテンツ領域のみ - border-box
width/heightはpaddingとborderを含む全体サイズ
「border-box」を指定した場合の計算式の変化
- 指定サイズが最終サイズ
width/heightで指定した値が、padding+border+contentの合計になる - コンテンツ領域は自動調整
content=width-padding-borderで自動計算
表示例
以下のエディタで、同じwidthを指定してもbox-sizingによってサイズが変わることを確認してみましょう。
計算の詳細例
box-sizing: border-boxでは、以下のように計算されます:
- コンテンツ領域 100px - 40px - 4px = 56px
- 実際の要素幅 100px(指定サイズがそのまま最終サイズ)
現代のWeb開発では、以下の設定を最初に適用することが一般的です。
- 全要素に適用
*, *::before, *::after { box-sizing: border-box; } - レイアウト計算が簡単 指定した幅がそのまま最終的な幅になる
- レスポンシブ対応が楽 パーセント指定でのレイアウト分割が直感的
- フレームワークでも採用 Bootstrap、Tailwind CSSなども標準で使用
この設定により、marginとpaddingを使ったレイアウト制御がずっと簡単になります。
理解度チェッククイズ
CSS余白の基本クイズ
.box {
width: 200px;
padding: 15px;
border: 5px solid blue;
margin: 10px;
} .card {
width: 300px;
padding: 20px;
border: 5px solid red;
} <div class="container">
<button class="btn">ボタン1</button>
<button class="btn">ボタン2</button>
</div> まとめ
- margin 要素間の距離調整と中央寄せ(margin: auto)に使用
- padding 要素内のコンテンツ余白とクリック範囲拡大に使用
- 省略記法 1つ→全方向、2つ→上下・左右、4つ→時計回り(上・右・下・左)
- box-sizing: border-box 現代の推奨設定で直感的なサイズ計算が可能
- 単位の使い分け px(精密)、rem(基本)、%(レイアウト分割)を適切に選択
- 実践的な組み合わせ marginで配置、paddingで快適性を向上させる
次回は、FlexboxやGridといったモダンなレイアウト手法を学んで、さらに柔軟で効率的なWebデザインを身につけていきましょう。