先行するフロートの上方に後続のフロートが置かれる

症状

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>
A
B
C
D
(Clear)

Cのフロートはclearプロパティにより回り込みが抑制されています。Bのフロートの右にはフロートを置ける領域がありますが、Dのフロートは前にあるCのフロートより上に置かれてはならないため、DのフロートはCのフロートの真横(右)に置かれるはずです。

スクリーンショット

N7N7.02での表示(標準モード)

Op7Opera7.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>
A
B
C
D
(Clear)

以下にスクリーンショットを置きます。

Op7Opera7.10での表示(標準モード)

修正状況

  • Opera6.06では不具合の発生はみられません。
  • Opera7.03では標準・互換モードともに不具合の発生が確認されました。

関連記事

スポンサーリンク

ファイルを読み込む/ファイルに書き込む

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る