Go to information

margin

marginプロパティはボックスの上下左右のマージン領域(他の要素と見分けをつけるための最も外側にある余白)をまとめて指定します。マージン領域とは、たとえば、視覚環境の UA のデフォルトスタイルシートにおいて、blockquote要素, form要素, h1-h6要素, p要素などのブロック要素の上下(blockquote要素の場合は上下左右)に設定されている透明の(親要素の背景が透ける)余白部分のことです。これらの要素にデフォルトで設けられているマージンをなくしたり、さらに広げたりするのも、marginプロパティによって操作できます。

初期値
個別のプロパティの初期値("0")を参照
適用対象
すべての要素表の行・行グループ・列・列グループ・セル要素を除く)
継承
しない
メディア
visual

marginプロパティに指定できる値は、それぞれ以下の意味を示します。

<長さ>
"em", "px" などの単位識別子を伴う数値で指定
<パーセンテージ>
包含ブロックの横幅を基準とするパーセンテージ(%)による割合で指定(上・下辺のマージンも横幅を参照)
auto
UA のレンダリング(描写)に依存(auto と各プロパティの兼ね合いを参照)

これらの値を半角スペースで区切って1つ以上4つ以下まで指定することができます。値を1つだけ記述した場合は、その指定が上下左右の四辺全部に反映され、2つの場合は「上下」「左右」の順に反映され、3つで「上」「左右」「下」の順に反映され、4つで「上」「右」「下」「左」の時計回りの順で四辺個別に反映されます。

なお、パーセンテージ値は包含ブロック(もっとも近い祖先の要素にあたるブロック要素の内容領域)の横幅を参照します。左辺(margin-left)・右辺(margin-right)のマージンだけでなく、上辺(margin-top)・下辺(margin-bottom)のマージンにおいても、参照する基準値は高さの方ではなく横幅の方であることに注意してください。

auto と各プロパティの兼ね合い

"auto" を指定した場合、要素の内容領域の横幅を指定する widthプロパティ、要素の位置を指定する topプロパティ, bottomプロパティ, leftプロパティ, rightプロパティとの兼ね合いでマージンが算出されることになります。

この内容の解釈はとても複雑なので、ここではあえて簡単な説明だけに止めておきます。まず、適用対象がインライン要素や floatプロパティによる左右どちらかへのフロート(浮動化)を指定された要素である場合、"auto" の指定は常に "0" の値を算出します。そして、最低限抑えておきたい点として、leftプロパティと rightプロパティの値が "auto" で、widthプロパティの値が "auto" 以外で横幅が指定されたブロック要素を対象とする場合は、次のようなマージンが算出されることになります。

上記パターン以外で "auto" が算出するマージンを活用することはないので、詳細は CSS2.1の視覚整形モデル詳細を参照ください。

マージンの相殺(collapsing margins)

マージンの相殺の身近な例を挙げます。段落を作成するための p要素は、視覚環境の UA のデフォルトスタイルシートでは上下に1行分のマージンが設けられているはずです。この上下に1行分のマージンをもつ p要素がソース内にて連続した場合に、上にある p要素が下辺に1行分のマージンを作り、続く下にある p要素も上辺に1行分のマージンを作るはずですが、これらの p要素が隣り合っている部分には計2行分のマージンができるのではなく、なぜか1行分のマージンしかできません。これがマージンの相殺(collapsing margins)です。

floatプロパティによる左右どちらかへのフロート(浮動化)、及び positionプロパティによる絶対配置("absolute"、または "fixed")が指定されていないブロック要素が隣り合った場合に限り、垂直(上下)方向のマージンは相殺されることになります(CSS2 の仕様では、水平方向のマージンの相殺は行われません)。垂直方向のマージンの相殺は、指定された値により、最終的なマージンの算出方法が次の3パターンに別れます。

  1. 正の値のマージンが隣り合った場合、指定された正の値が大きな方のマージンを採用する。
  2. 正の値と負の値のマージンが隣り合った場合、両方の値を足しあわせた値を採用する。
  3. 負の値のマージンが隣り合った場合、指定された負の値が大きな方のマージンを採用する。
<p style="margin : 5px 5px 30px 5px ;">上の段落</p>
<p style="margin : -20px 5px 5px 5px ;">下の段落</p>

たとえば、このサンプルであれば、上の段落は下辺に "30px" のマージンが指定されており、下の段落は上辺に "-20px" のマージンが指定されているので、2番目のパターンの正の値と負の値のマージンが隣り合った場合にあてはまり、最終的なマージンの算出は、両方の値を足しあわせた "30px + (-20px) = 10px" となります。

上・下・左・右のマージンを個別指定

margin-top
上辺のマージン(余白)を指定する
margin-bottom
下辺のマージン(余白)を指定する
margin-left
左辺のマージン(余白)を指定する
margin-right
右辺のマージン(余白)を指定する

上・下・左・右のマージン(余白)を個別に指定する場合は、これら4つのプロパティが用意されています。marginプロパティと違うのは値を1つしか指定できないことだけで、その他は同じなので、これらの個別プロパティについての解説は割愛します。

marginプロパティの実装状況

Windows版Internet Explorer
○(Windows版Internet Explorer 6 の後方互換モードでは左・右辺に指定された "auto" の値が算出するマージンは常に "0" になる)
Firefox
Opera
Safari
Macintosh版Internet Explorer 5
○(一部のブロック要素において左・右辺に指定された "auto" の値が算出するマージンは常に "0" になる)

margin-topプロパティ, margin-bottomプロパティ, margin-leftプロパティ, margin-rightプロパティも同上。

サンプル

記述例
<div style="text-align : center ; ">
<table style="margin-left : auto ; margin-right : auto ;
text-align : left ;" border="1"><tr><td>
横幅の指定されたブロック要素のセンタリング
</td></tr></table></div>
<div style="text-align : right ; ">
<table style="margin-left : auto ; margin-right : 0 ;
text-align : left ;" border="1"><tr><td>
横幅の指定されたブロック要素の右寄せ
</td></tr></table></div>
表示例

サンプルのように marginプロパティは、横幅の指定されたブロック要素の左右中央揃えに応用することができます。ただし、Windows版Internet Explorer 6 が1行目に XML宣言があると自動的にレンダリングモードを後方互換モードに切り替えてしまうバグがあることとの兼ね合いもあって、現状の XHTML文書において横幅の指定されたブロック要素の左右中央揃えを行うのには現実的に text-alignプロパティの指定を伴う必要があります。詳しくは CSS によるブロック要素の左右中央揃えを参照ください。

現在位置
  1. W3G
  2. CSS
  3. ボックス
  4. margin
ナビゲーション
ステータス情報
作者
上田 遼
公開
2007-02-02T16:34:07+09:00
更新
2008-12-29T04:30:38+09:00
URI
http://w3g.jp/css/box/margin
検索

直近の制作実績等:大阪人間科学大学 New! / 大阪薫英女子短期大学 New! / セキスイハイム みんなのお国じまん New!