2003-04-28修正。例示の変更と補足の追加。
CSS2では、フロートは自身より前にあるフロートより上に置かれてはならないと決められている。しかしOperaでは、フロートを置ける領域がある場合に、自身より前にあるフロートより上に後続のフロートが置かれてしまうことがある。
<div style="float:left; width:4em; height:4em; background:aqua;">A</div> <div style="float:left; width:4em; height:3em; background:lime;">B</div> <div style="float:left; clear:left; width:4em; height:3em; background:fuchsia;">C</div> <div style="float:left; width:4em; height:4em; background:teal;">D</div> <div style="clear:left;">(Clear)</div>
Cのフロートはclearプロパティにより回り込みが抑制されています。Bのフロートの右にはフロートを置ける領域がありますが、Dのフロートは前にあるCのフロートより上に置かれてはならないため、DのフロートはCのフロートの真横(右)に置かれるはずです。
N7.02での表示(標準モード)
Opera7.10での表示(標準モード)
このバグは、フロート化したボックスを並べているとき発生します。フロートでないボックスを途中に挟むとバグの発生をある程度防ぐことができます。以下の例では、DのフロートはCのフロートの右に置かれますが、Dのフロートの上辺はBのボックスの下辺のすぐ下にきてしまいます(BとDが接してしまう)。
<div style="float:left; width:4em; height:4em; background:aqua;">A</div> <div style="float:none; margin-left:4em; width:4em; height:3em; background:lime;">B</div> <div style="float:left; clear:left; width:4em; height:3em; background:fuchsia;">C</div> <div style="float:left; width:4em; height:4em; background:teal;">D</div>
以下にスクリーンショットを置きます。
Opera7.10での表示(標準モード)