垂直方向のマージンの相殺(margin collapsing)についてです。特に難しいことはないですが、レイアウトする時は気にする必要があると思います。
マージンの相殺は、各ブラウザが実装しても、しなくてもいい仕様だそうです。ここで述べられている内容は、Firefox2, IE6, Opera9ではそのとおりになります。ただし、IE6では”haslayout”になると、マージンの相殺は起こらないようです。ご指摘ありがとうございました。
A.基本
- 垂直方向のマージンは相殺されて、長い方のマージンになる。フロートしたボックス、及びposition: absoluteのボックスは相殺されない。

- あるボックスがボックスに内包されている場合、かつ外側のボックスにpaddingとborderが無い場合、垂直方向のマージンは相殺されて長い方のマージンになる。

- ボックス内が空の場合は、自分自身の上下マージンも相殺されて長い方のマージンにまとまる。

B.Tips
Tipsというほどではありませんが、垂直マージンの相殺は、複数パラグラフの最初と最後のマージンと途中のマージンを同じにする効果があります。マージンを同じにするだけなら、最初のパラグラフにmargin-topでいくらとか、計算する必要はありません。

また、よくある
HTML
<div id="box">
<p>このパラはmargin 20pxです。</p>
</div>
包含div#boxにmargin:10pxをして、
CSS
div#box {
margin: 10px;
background-color:#d5d5d5;
}
p{
margin: 20px;
background-color:#6699FF;
}
以下のような結果を期待しても、
このパラはmargin 20pxです。
以下のようになってしまいます。
このパラはmargin 20pxです。
これを期待したようにするためには、垂直方向のpaddingかborderを包含ボックスに入れれば良いです。
CSS
div#box {
margin: 9px;
padding: 1px;
background-color:#d5d5d5;
}
p{
margin: 20px;
background-color:#6699FF;
}
これで、期待したとおり(上の方の例)の結果になります。








Trackback URL
2 Comments
実装系依存の話は該当する実装系を書くべきだと思います。
> SBMに「CSSバグ」としている方がいましたが、これは仕様です。
CSS 2の仕様としてはあくまでも「Vertical margins may collapse between certain boxes:」です。実装する際にcollapseしてもよいというだけなので、必ずcollapseするわけではありません。しない実装系もありえるわけです。
http://www.w3.org/TR/1998/REC-CSS2-19980512/box.html#collapsing-margins
2.1のWDでもその点は変わっていません。
http://www.w3.org/TR/2006/WD-CSS21-20061106/box.html#collapsing-margins
すばやい対応ありがとうございます。
One Trackback/Pingback
[...] マージンの相殺について:CSS | Tech de Go (tags: css layout) [...]
Post a Comment