はじめに
Web制作をしているとよく登場する「margin」。
見た目を整えるうえで欠かせないプロパティですが、paddingとの違いや上下のマージンが重なってしまうマージンの相殺など、初心者がつまずきやすいポイントも多いです。
この記事では、CSSのmarginの基本から応用、よくある注意点までをわかりやすく解説します。
これを読めば「marginを自由自在に使いこなす」ことができるようになります。
marginとは?
margin
(マージン)は、要素の外側の余白を指定するCSSプロパティです。
つまり「他の要素との距離」を調整するために使います。
See the Pen Untitled by suguru (@suguru22) on CodePen.
上記の例では、ボックスの外側に75pxの余白ができます。
この余白によって、ほかの要素やブラウザの端との距離が確保されます。
marginの指定方法
marginは4方向に分けて指定できます。
プロパティ | 意味 | 例 |
---|---|---|
margin-top | 上の余白 | margin-top: 10px; |
margin-right | 右の余白 | margin-right: 20px; |
margin-bottom | 下の余白 | margin-bottom: 30px; |
margin-left | 左の余白 | margin-left: 40px; |
省略記法(shorthand)
4つのmarginをまとめて指定することもできます。
margin: 10px 20px 30px 40px;
/* 上 右 下 左 の順番 */
また、指定する数が少ない場合は以下のように省略も可能です。
記述 | 意味 |
---|---|
margin: 10px; | 上下左右すべて10px |
margin: 10px 20px; | 上下10px、左右20px |
margin: 10px 20px 30px; | 上10px、左右20px、下30px |
margin: 10px 20px 30px 40px; | 上10px、右20px、下30px、左40px |
marginの単位
よく使われる単位は以下の通りです。
単位 | 意味 |
---|---|
px | ピクセル(固定値) |
% | 親要素の幅に対する割合 |
em | 要素のフォントサイズに対する相対値 |
rem | ルート要素(html)のフォントサイズに対する相対値 |
たとえば以下のように書くと、親の幅に応じて動的に余白が変化します。
.box {
margin: 5%;
}
margin: auto で中央寄せ
ブロック要素を横方向に中央寄せするには、margin: 0 auto;
を使います。
.box {
width: 200px;
margin: 0 auto;
}
親要素にtext-align
を使わずに中央配置できる便利な方法です。
※ただし、width
を指定していないと中央寄せはできません。
marginとpaddingの違い
項目 | margin | padding |
---|---|---|
位置 | 要素の外側 | 要素の内側 |
影響範囲 | 他の要素との距離に影響 | コンテンツと枠線の距離に影響 |
背景色 | 背景は適用されない | 背景色が反映される |
例
.box {
background-color: lightblue;
margin: 20px;
padding: 20px;
}
この場合、paddingは背景色の中に余白を作り、marginは外側に余白を作ります。
見た目を整えるときは、どちらで余白を取るのかを意識することが大切です。
marginの相殺(collapse)
2つの縦方向のmarginが重なった場合、大きい方のmarginだけが適用されます。
これを「marginの相殺(マージンの重なり)」と呼びます。
See the Pen Untitled by suguru (@suguru22) on CodePen.
この場合、上下のmarginが50px + 30px = 80pxにはならず、50pxだけが反映されます。
よくあるトラブルと解決方法
子要素のmarginが親要素を押し上げる
親要素の中の最初の子要素にmargin-top
を指定すると、親ごとずれてしまうことがあります。
これは「marginの相殺」が原因です。
解決方法
overflow: hidden;
を親に指定する- 親に
padding-top
を与える - 親に
border-top: 1px solid transparent;
を与える(transparent:透明指定)
などで相殺を防げます。
marginを使うコツ
- デザインの統一感を出すために、余白の基準値を決めておく(例:8px単位)
- コンポーネント間の余白はmarginで、内部の調整はpaddingで
- 上下marginの相殺を意識して、思わぬズレを防ぐ
まとめ
margin
は、CSSレイアウトの中でも最も基本的でありながら、理解が深まるほど奥が深いプロパティです。
「外側の余白」「autoで中央寄せ」「上下の相殺」など、今回紹介したポイントを押さえることで、
より美しく整ったWebデザインを作ることができます。