垂直マージンを持つ left-/right-floating 要素の現在の仕様にはバグがあることに注意してください: これらの垂直マージンは、そのすぐ上にある非浮動要素の垂直マージンに折りたたまれません。
一貫性がありません...そして、これらの垂直マージンの動作がブラウザー間で同じでない場合があります (正常に折りたたまれるものもあります)。
これにより、これらの浮動要素とそのすぐ横にある非浮動要素の垂直方向の配置が不均衡になります。
<div style="border:1px solid black;margin:10px">Non-floatting above.</div>
<div style="border:1px solid black;margin:10px;float:left">Floatting on the left.</div>
<div style="border:1px solid black;margin:10px;float:right">Floatting on the right.</div>
<div style="border:1px solid black;margin:10px">Non-floatting in the middle.</div>
<div style="border:1px solid black;margin:10px;clear:both">Non-floatting below.</div>
中央の 3 つのブロックが整列していないことに注意してください。左右の浮動ブロックは、中央の非浮動ブロックの 10 ピクセル下に予期せず配置されています...
ただし、下のブロック (「clear:both」を使用)は下にシフトされる可能性があります (ただし、このクリアはフロートの下マージンを無視しますが、これらのフローティング下マージンは、下の要素の上マージンの縮小に引き続き関与する可能性があります。
そのため、フロートの上マージンは期待どおりに機能しません。これらの非フローティング要素にも同じマージンが必要な場合、フロートが正しい上マージンを採用し、フロート以外の要素がすぐ横に配置されるように設計された非フローティング要素と一貫性のあるデザインを作成することはできません。 .
回避策は、親ブロックの中央の行にあるすべてのブロックを独自の垂直マージンを持つ親ブロックにカプセル化することです。中央のすべてのブロックには垂直マージンがあってはなりません。そして、これらすべてのフロートが行に収まらない場合、これは問題を引き起こします。一部は「ラップ」してマージンがなくなります!
唯一の回避策は、親ブロック内のすべての中央要素をマージンなしでカプセル化し、上下のコンテンツで垂直マージンの崩壊に参加しないことですが、中央のすべての要素はマージンを設定する必要があります。その場合、中央の行の垂直マージンを中央の行のすぐ上または下にある行の垂直マージンと正しく折りたたむことを許可する方法はありません。
<div style="border:1px solid black;margin:10px">Non-floatting above.</div>
<div style="position:relative">
<div style="border:1px solid black;margin:10px;float:left">Floatting on the left.</div>
<div style="border:1px solid black;margin:10px;float:right">Floatting on the right.</div>
<div style="border:1px solid black;margin:10px">Non-floatting in the middle.</div>
<div style="clear:both"></div>
</div>
<div style="border:1px solid black;margin:10px">Non-floatting below.</div>