Webページを作るとき、要素同士の間隔を調整するのに欠かせないのがCSSの「margin(マージン)」。
けれど、初心者にとっては「marginって何?paddingとどう違うの?」「どう書けばいいのかよくわからない」と感じることが多いです。
この記事では、CSSのmarginについて次のことをやさしく解説します:
- marginとはそもそも何か
- 具体的な書き方と使い方
- paddingとの違い
- よくあるミスと注意点
初心者の方でも理解できるよう、図や実例を使いながら丁寧に説明していきますので、最後まで読んでみてください。
1. marginとは?

marginの役割
CSSのmargin
は、要素の外側の余白を設定するプロパティです。これにより、要素と要素の間のスペースを確保できます。
例えば、2つの<div>
が並んでいるとき、marginを設定するとその間にすき間を作ることができます。
図でイメージ
┌────────────┐
│ 要素A │
└────────────┘
↕ margin(余白)
┌────────────┐
│ 要素B │
└────────────┘
このように、marginは要素の外側のスペースを調整します。
実際の使用場面
段落間の余白:
- ブログ記事の段落と段落の間
- 見出しと本文の間隔
- カード要素同士の間隔
レイアウトの調整:
- ヘッダーとメインコンテンツの間
- サイドバーとメイン部分の間
- フッターとコンテンツの間
簡単な実例
<div class="article">
<h1>記事のタイトル</h1>
<p>最初の段落です。</p>
<p>2番目の段落です。</p>
</div>
h1 {
margin-bottom: 20px; /* タイトルの下に20pxの余白 */
}
p {
margin-bottom: 15px; /* 段落の下に15pxの余白 */
}
marginは「要素のまわりの外側の余白」を作るために使います。次は、具体的にどうやってCSSでmarginを指定するのか見ていきましょう。
2. marginの基本的な書き方
単純に全方向に余白をつける
.box {
margin: 20px;
}
この場合、上下左右すべて20pxの余白がつきます。
上下左右を個別に指定する
より細かく制御したい場合は、各方向を個別に指定できます:
.box {
margin-top: 10px; /* 上 */
margin-right: 20px; /* 右 */
margin-bottom: 30px; /* 下 */
margin-left: 40px; /* 左 */
}
ショートハンド(まとめ書き)
4つの値をまとめて指定することもできます:
.box {
margin: 10px 20px 30px 40px;
}
/* 上 右 下 左 の順番(時計回り) */
覚え方のコツ:
- 12時の位置(上)から時計回りに指定
- 「上→右→下→左」の順番
よく使われるパターン
上下と左右をそれぞれ指定
.box {
margin: 10px 20px;
}
/* 上下:10px、左右:20px */
上だけ、左右、下を指定
.box {
margin: 10px 20px 30px;
}
/* 上:10px、左右:20px、下:30px */
実際の使用例
/* ブログ記事のスタイル */
.article {
margin: 0 auto; /* 左右中央寄せ */
max-width: 800px;
padding: 20px;
}
.article h2 {
margin: 40px 0 20px 0; /* 上:40px、右:0、下:20px、左:0 */
}
.article p {
margin: 0 0 15px 0; /* 下にだけ15pxの余白 */
}
.article img {
margin: 30px 0; /* 上下に30pxの余白 */
}
単位の種類
marginでは様々な単位が使えます:
.examples {
/* ピクセル(固定値) */
margin: 20px;
/* パーセント(親要素の幅に対する割合) */
margin: 5%;
/* em(フォントサイズに対する割合) */
margin: 1.5em;
/* rem(ルート要素のフォントサイズに対する割合) */
margin: 2rem;
/* ビューポート単位 */
margin: 5vw; /* ビューポート幅の5% */
}
このように、marginは「一括指定」「個別指定」「上下左右ペア指定」と使い分けできます。次は、よく混同されるpaddingとの違いを確認しましょう。
3. marginとpaddingの違い

paddingとは
padding
は要素の内側の余白です。
基本的な違い:
- margin:要素の外側の余白(他の要素との間隔)
- padding:要素の内側の余白(内容と境界の間隔)
図で比較
┌──────────────────────┐ ← margin
│ ┌────────────────┐ │
│ │ ↕ padding │ │
│ │ ┌──────────┐ │ │
│ │ │コンテンツ│ │ │
│ │ └──────────┘ │ │
│ └────────────────┘ │
└──────────────────────┘ ← margin
実際の見た目の違い
<div class="margin-example">marginの例</div>
<div class="padding-example">paddingの例</div>
.margin-example {
background-color: lightblue;
margin: 30px; /* 外側に30pxの余白 */
}
.padding-example {
background-color: lightcoral;
padding: 30px; /* 内側に30pxの余白 */
}
見た目の違い:
- marginの例:背景色の外側に余白ができる
- paddingの例:背景色の内側に余白ができる(背景色の範囲が広がる)
よくある勘違い
「余白」と聞くとどちらも同じに感じますが、役割が全然違います:
marginを増やすと:
- 要素自体の位置がずれる
- 他の要素との距離が変わる
- 要素の大きさ(見かけ)は変わらない
paddingを増やすと:
- 要素の大きさ(見かけ)が大きくなる
- 内容と境界の間隔が広がる
- 他の要素との距離は変わらない
実践的な使い分け
/* ボタンの例 */
.button {
padding: 12px 24px; /* ボタンの内側の余白(クリック領域) */
margin: 0 10px; /* ボタン同士の間隔 */
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
}
/* カードの例 */
.card {
padding: 20px; /* カード内のコンテンツとの余白 */
margin: 15px; /* カード同士の間隔 */
background-color: white;
border: 1px solid #ddd;
border-radius: 8px;
}
ボックスモデルの理解
.box {
width: 200px;
height: 100px;
padding: 20px; /* 内側の余白 */
border: 2px solid #333;
margin: 30px; /* 外側の余白 */
}
実際の表示領域:
- 内容エリア:200px × 100px
- padding込み:240px × 140px(padding 20px × 2)
- border込み:244px × 144px(border 2px × 2)
- margin込み:304px × 204px(margin 30px × 2)
「外側ならmargin」「内側ならpadding」と覚えると分かりやすいです。次は、初心者がよくつまずくmarginの注意点を紹介します。
4. marginでよくある注意点
marginの相殺(マージンの重なり)
縦方向のmarginは、上下の要素が両方にmarginを持つと大きい方だけが適用されます。
<div class="box1">ボックス1</div>
<div class="box2">ボックス2</div>
.box1 {
margin-bottom: 50px;
}
.box2 {
margin-top: 30px;
}
予想: 50px + 30px = 80px の間隔 実際: 50px の間隔のみ
これを「marginの相殺(margin collapse)」といいます。
marginの相殺が起きる条件
- 縦方向のみ(横方向では起きない)
- 隣接する要素同士
- ブロック要素同士
- floatやposition:absoluteが適用されていない
相殺を避ける方法
/* 方法1:paddingを使う */
.box1 {
padding-bottom: 25px;
}
.box2 {
padding-top: 25px;
}
/* 方法2:どちらか片方だけにmarginを設定 */
.box1 {
margin-bottom: 80px;
}
.box2 {
margin-top: 0;
}
/* 方法3:flexboxを使う */
.container {
display: flex;
flex-direction: column;
gap: 80px; /* 要素間の間隔を指定 */
}
インライン要素には効かない場合がある
<span>
、<a>
、<strong>
などのインライン要素にmarginをつけても、上下方向には効かないことが多いです。
/* これは効かない場合が多い */
span {
margin: 20px; /* 左右のみ効果があり、上下は効かない */
}
/* 解決方法 */
span {
display: inline-block; /* または block */
margin: 20px;
}
負のmarginの注意点
marginには負の値も指定できますが、レイアウトが崩れやすくなります:
.overlap {
margin-top: -20px; /* 上の要素に20px重ねる */
margin-left: -10px; /* 左に10pxはみ出す */
}
使用例:
- デザイン上の微調整
- 要素の重なり効果
- レスポンシブでの位置調整
注意点:
- 他の要素に影響を与える可能性
- レスポンシブ対応が困難
- メンテナンスが大変
autoの活用
marginにはauto
という値も指定できます:
/* 左右中央寄せ */
.center {
width: 600px;
margin: 0 auto; /* 上下:0、左右:auto */
}
/* 右寄せ */
.right-align {
width: 300px;
margin-left: auto;
}
よくあるトラブルと解決法
1. 中央寄せが効かない
/* 問題のあるコード */
.center {
margin: 0 auto; /* 幅が指定されていない */
}
/* 正しいコード */
.center {
width: 600px; /* 幅を指定 */
margin: 0 auto;
}
2. 縦方向の間隔が思った通りにならない
/* margin collapseが原因の場合 */
.section {
margin: 40px 0; /* 上下40pxのつもりが... */
}
/* 解決策:一方向だけにmarginを設定 */
.section {
margin-bottom: 40px;
margin-top: 0;
}
3. レスポンシブで間隔が大きすぎる
/* 固定値だとスマホで問題になる場合 */
.element {
margin: 50px; /* スマホでは大きすぎる */
}
/* レスポンシブ対応 */
.element {
margin: 20px;
}
@media (min-width: 768px) {
.element {
margin: 50px;
}
}
/* または相対単位を使用 */
.element {
margin: 5vw; /* ビューポート幅の5% */
max-margin: 50px; /* 擬似的な最大値制限 */
}
5. 実践的な使い方

レスポンシブデザインでのmargin
/* モバイルファースト */
.container {
margin: 20px;
}
/* タブレット */
@media (min-width: 768px) {
.container {
margin: 40px auto;
max-width: 1200px;
}
}
/* デスクトップ */
@media (min-width: 1024px) {
.container {
margin: 60px auto;
}
}
カードレイアウトでの活用
.card-container {
display: flex;
flex-wrap: wrap;
margin: -15px; /* 負のmarginでgapを調整 */
}
.card {
flex: 1 1 300px;
margin: 15px;
padding: 20px;
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
ナビゲーションメニューでの使用
.nav {
margin: 0;
padding: 0;
list-style: none;
display: flex;
}
.nav li {
margin-right: 20px;
}
.nav li:last-child {
margin-right: 0; /* 最後の要素はmarginなし */
}
まとめ
CSSのmarginについて、重要なポイントをまとめます:
marginの基本
- marginは要素と要素の外側のスペースを調整するプロパティ
- 書き方は
margin: 20px;
のように一括指定か、margin-top
などで個別指定 - paddingは内側の余白なので用途が違う
重要な注意点
- 上下方向のmarginは相殺があるので、思ったより間隔が小さくなることがある
- インライン要素には上下のmarginが効きにくい
- autoを使うことで左右中央寄せができる
実践のコツ
- レスポンシブ対応では相対単位も活用
- margin collapseを避けるためにgapやpaddingの併用を検討
- デバッグ時は背景色をつけて余白を視覚的に確認
コメント