余白はウェブページを見やすく、そして美しく見せるためにとても大事なポイントです。今回はCSS初心者にとって最大の難関である余白設定(margin と padding)を、図解とコード例を使いながらイチから解説します。
1. margin と padding とは?
CSSでは要素のまわりの余白を margin(マージン)と padding(パディング)というプロパティで指定します。
| プロパティ | 位置 | 背景色は塗られる? |
|---|---|---|
padding |
要素の内側の余白 | ✅ 塗られる |
margin |
要素の外側の余白 | ❌ 塗られない |
1-1. ボックスモデル(余白の構造)
CSSの余白の考え方は「ボックスモデル」と呼ばれます。内側から順に、以下の4層で構成されています。
← width / height はここの大きさ
1-2. pタグで余白を確認してみよう
<p>これは要素です</p> を例に、余白の変化を見てみましょう。
p {
background: orange;
padding: 0;
}
これは要素です
p {
background: orange;
padding: 10px;
}
これは要素です
💡 padding 部分にも背景色が塗られます。テキストまわりの余白を取りつつ背景色もきれいに見せたいときは padding を使います。
さらに border と margin を加えてみましょう。
p {
background: orange;
padding: 10px;
border: solid 3px black;
}
これは要素です
p {
background: orange;
padding: 10px;
border: solid 3px black;
margin: 10px;
}
これは要素です
1-3. width / height はどこの大きさ?
width と height は要素の「内容」部分の大きさを指定します。padding と border はその外側に加算されます。
⚠️ width: 200px; padding: 10px; と指定した場合、要素の実際の幅は 200 + 10 + 10 = 220px になります。padding が幅に含まれないことに注意しましょう。
これを解決するには box-sizing: border-box; を使います。
2. margin と padding の書き方
margin と padding は書き方も指定できる値もまったく同じです。セットで覚えてしまいましょう。
2-1. 上下左右をまとめて指定
4方向すべてに同じ値を設定したいときは、値を1つだけ書きます。
<p class="above">前の要素</p>
<p class="middle">要素</p>
<p class="under">後の要素</p>
.middle {
background: orange;
padding: 10px;
margin: 10px;
}
.above { background: skyblue; }
.under { background: silver; }
前の要素
要素
後の要素
2-2. 上下左右の一部だけ指定
特定の方向だけ指定したいときはプロパティ名を変えます。
| 方向 | margin | padding |
|---|---|---|
| 上だけ | margin-top |
padding-top |
| 下だけ | margin-bottom |
padding-bottom |
| 左だけ | margin-left |
padding-left |
| 右だけ | margin-right |
padding-right |
.middle {
background: orange;
padding-left: 20px;
margin-top: 20px;
}
前の要素
要素
後の要素
2-3. 上・右・下・左を一度にまとめて指定(時計回り)
4方向に異なる値を指定するとき、上から時計回り(上・右・下・左)の順に半角スペースで区切って並べます。
20px
10px
5px
0px
右
下
左
.middle {
background: orange;
/* 上0 右0 下20px 左20px */
margin: 0 0 20px 20px;
padding: 0 0 20px 20px;
}
前の要素
要素
後の要素
2-4. 上下と左右をまとめて指定(2値指定)
値を2つ書くと「上下」と「左右」をまとめて指定できます。
10px
0
左・右 = 0
.middle {
background: orange;
/* 上下20px 左右0 */
margin: 20px 0;
/* 上下0 左右20px */
padding: 0 20px;
}
前の要素
要素
後の要素
📌 書き方まとめ
値1つ:上下左右すべて同じ値
値2つ:上下 左右
値4つ:上 右 下 左(時計回り)
3. margin と padding を % で指定する
margin と padding は px だけでなく % で指定することもできます。%指定は主に左右の余白を指定するときに使います(上下の余白に%を使うことはほとんどありません)。
3-1. %指定の計算方法
margin・padding を % で指定したとき、基準になるのは親要素の「横幅(width)」です。
→ 1000px × 10% = 100px
→ 1000px × 20% = 200px
💡 横の %合計が 100% になるように指定しましょう。margin・padding・width の合計が 100% を超えると、親要素からはみ出てしまいます。
<div class="parent">
<p>これは例文です</p>
</div>
.parent {
background: silver;
width: 200px;
}
.parent p {
width: 60%;
margin: 0 20%; /* 左右20%ずつ */
padding: 0;
background: orange;
}
これは例文です
左右に各40px(200px × 20%)の余白
3-2. border を加えるときの注意点
margin・padding・width を % で合計 100% に揃えていても、border の太さは % 指定できないため、border を追加するとその分だけ親要素からはみ出てしまいます。
⚠️ この問題を解決するには box-sizing: border-box; を指定します。これにより border と padding が width の内側に含まれるようになります。
3-3. %指定の使いどころ
margin・padding の % 指定は、レスポンシブデザインを作るときにとても便利です。
| 指定方法 | スマホ(幅320px) | PC(幅1200px) |
|---|---|---|
margin: 20px(px固定) |
20px(大きすぎる) | 20px(小さすぎる) |
margin: 2%(%指定) |
6.4px(ちょうど良い) | 24px(ちょうど良い) |
4. margin の相殺
前後に並んだ要素それぞれに margin が設定されているとき、margin の相殺という現象が起こります。これが CSS の余白設定を分かりづらくしている原因のひとつです。
4-1. margin が並ぶと1つしか適用されない
前の要素の margin-bottom と、後ろの要素の margin-top が隣接すると、どちらか大きい方のみが適用されます(合算はされません)。
.element1 {
margin-bottom: 10px;
}
.element2 {
margin-top: 20px;
}
/* → 要素間の実際の余白は 20px(大きい方)になる */
4-2. 親要素との間でも相殺は起こる
親要素の margin-top と、その中の子要素の margin-top が隣接するときも相殺が起こります。前の要素との余白は値の大きいほうが適用されます。
⚠️ 「marginを指定したのに余白が思い通りにならない」と感じたら、相殺が起きている可能性があります。padding を使うと相殺は起こりません。
4-3. padding では相殺は起こらない
| 前後の要素と並んだとき | 親要素と並んだとき | |
|---|---|---|
margin |
⚠️ 相殺が起こる | ⚠️ 相殺が起こる |
padding |
✅ 相殺しない | ✅ 相殺しない |
5. 要素を左右中央配置にするテクニック
margin の値に auto を指定すると、余白を自動で均等に配分してくれます。これを活用すれば display: block の要素を簡単に中央配置できます。
5-1. margin: 0 auto で中央配置
+
margin-right: auto;
上下の margin は 0 にしたい場合、2値指定を使って margin: 0 auto とシンプルに書けます。
<div class="parent">
<p>例文</p>
</div>
.parent {
background: silver;
width: 250px;
}
.parent p {
width: 80px;
margin: 0 auto; /* 中央配置の呪文 */
background: orange;
}
例文
オレンジの要素が中央に配置された
5-2. 注意事項
| 方法 | 結果 |
|---|---|
margin: 0 auto |
✅ 左右中央に配置できる |
| 上下の margin に auto | ❌ 上下中央にはならない |
padding: 0 auto |
❌ padding の auto 指定は中央配置にならない |
display: inline の要素 |
❌ 効かない(text-align: center を使う) |
💡 margin: 0 auto で中央配置できるのは display: block の要素だけです。display: inline の要素(a・span など)を中央寄せしたい場合は、親要素に text-align: center を指定しましょう。
📝 まとめ
- padding = 要素の内側の余白 / 背景色が塗られる
- margin = 要素の外側の余白 / 背景色は塗られない
- width / height が指定するのは「内容」部分の大きさ。padding・border は外側に加算される
- 書き方は値1つ(全方向)・2つ(上下 / 左右)・4つ(上・右・下・左 の時計回り)
- 上下左右ごとに指定する場合は
margin-topなど方向付きプロパティを使う - %指定の基準は親要素の横幅。横の %合計が 100% になるように調整する
- border は % 指定できないため、%指定と border を併用するときは
box-sizing: border-boxを使う - 【marginの相殺】隣接する margin は合算されず、大きいほうのみが適用される
- padding では相殺は起こらない
margin: 0 autoでdisplay: blockの要素を左右中央配置できる
次のステップ
次は display プロパティで inline・block・inline-block の違いと使い方を学びましょう。

