【6日でできるHTML&CSS入門】マージンの相殺

 ウェブページをデザインするとき、要素同士の距離や余白を「マージン(margin)」で調整します。しかし、上下に並んだ要素のマージンが重なる(相殺される)現象があることをご存知でしょうか?
 この仕組みを「マージンの相殺(margin collapsing)」と呼びます。思ったより要素の間が狭かったり広かったりして、レイアウトで戸惑った経験がある方も多いはずです。この記事では、マージンの相殺の基本から、よくあるパターン、実際のHTMLサンプルとともに分かりやすく解説します。


1. マージンの相殺とは

1.1. マージンの相殺の概要

 マージンの相殺とは、上下の隣り合うブロック要素のマージンが足し算ではなく、どちらか大きいほうだけが適用されるCSSの仕様です。

用語内容
マージンの相殺隣接する上下マージンのうち大きいほうだけ有効

1.2. 基本的なサンプルで確認

ファイル名: lesson31_1.html

<!DOCTYPE html>
<html>
<head>
  <title>マージン相殺の例</title>
  <meta charset="utf-8"/>
  <style>
    .blockA {
      margin-bottom: 24px;
      padding: 16px;
      background-color: #b3e0ff;
    }
    .blockB {
      margin-top: 48px;
      padding: 16px;
      background-color: #b3ffd9;
    }
  </style>
</head>
<body>
  <div class="blockA">ブロックA<br>margin-bottom: 24px;</div>
  <div class="blockB">ブロックB<br>margin-top: 48px;</div>
</body>
</html>

表示結果

  • blockA の下マージンは24px、blockB の上マージンは48pxですが、間隔は「48px」になります。
  • マージンは合計されず、大きい方だけが適用されます。

2.マージン相殺が起こるパターン

2.1. ブロック要素の上下での相殺

隣接したブロック要素同士の上下マージンが相殺されます。

ファイル名: lesson31_2.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8"/>
  <style>
    .upper {
      margin-bottom: 32px;
      background-color: #fffae0;
    }
    .lower {
      margin-top: 56px;
      background-color: #e0fff9;
    }
  </style>
</head>
<body>
  <section class="upper">上の要素(下マージン32px)</section>
  <section class="lower">下の要素(上マージン56px)</section>
</body>
</html>

表示結果

上下の間隔は56pxになる。

2.2. ネストした要素(親子間)の相殺

親要素の上部・下部と、その最初や最後の子要素のマージンが相殺されることがあります。

ファイル名: lesson31_3.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8"/>
  <style>
    .parent {
      border: 2px solid #444;
      margin-top: 30px;
      margin-bottom: 30px;
    }
    .child {
      margin-top: 40px;
      margin-bottom: 50px;
    }
  </style>
</head>
<body>
  <div class="parent">
    <div class="child">子要素(margin-top: 40px; margin-bottom: 50px;)</div>
  </div>
</body>
</html>

表示結果

親要素の上下マージンと子要素の上下マージンのうち、大きい方が外側に現れる。

3.HTMLタグ・CSSプロパティ解説表

タグ・プロパティ説明
<div>汎用ブロック要素
<section>セクション分けのブロック要素
margin-top上側の外側余白を指定
margin-bottom下側の外側余白を指定
overflowボックスのはみ出し挙動。hidden等で相殺回避
border枠線を設定
background-color背景色を指定
padding内側余白を設定(相殺回避に使うことも)

まとめ

 マージンの相殺は、ウェブレイアウトの実装で「なぜ?」と感じやすいポイントですが、基本を知っていれば狙い通りのデザインがしやすくなります
相殺の仕組みや、回避のテクニックも活用しながら、思い通りの余白を作りましょう。