フロートを正しく配置できるのはOpera

フロートの配置がUAごとに違っていた」ではFirefoxもOperaもフロートを仕様通りに配置できていたが、次のような文書を表示させるとFirefoxにもIEと同じバグがあることが分かる。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <title>サンプル文書</title>
    <style type="text/css">
* { margin: 0; padding : 0 }
p {
 width: 20em;
 border: 1px solid gray;
 font: 16px/1 monospace;
 letter-spacing: 0
 }
span {
 float: left;
 width: 10em;
 border: 1px solid blue
 }
body {
  margin: 20px;
  background: white
}
    </style>
  </head>
  <body>
    <p>
      あいうえおかきくけこさしすせそたちつてとなにぬねの
      <span>ここがフロート</span>
      アイウエオカキクケコサシスセソタチツテトナニヌネノ
    </p>
  </body>
</html>
Internet Explorer 7
IE7で上記の文書を表示した結果
Firefox 2.0
Firefox2.0で上記の文書を表示した結果
Opera 9.10
Opera9.10で上記の文書を表示した結果

Operaだけ表示が違うが、正しいのはOperaである。OperaはCSS2.1の仕様書の9.5 Visual formatting model - Floatsに書かれている通りに、現在の行ボックスの上辺とフロートの上辺を一致させ、現在の行ボックスでフロートボックスを生成した要素より前にある内容をフロートの右側に流し込んでいる。IEとFirefoxはフロートを現在の行ボックスの一つ下に配置しており、これは間違いである(参考:インライン要素に挟まれているフロートが下にずれて置かれる - Mozilla 5.0系 CSSバグリスト)。heightプロパティの注意点~内容がfloat要素の場合 - Web標準普及プロジェクトによると、このFirefoxのバグはかなり前(Mozillaの時代)から存在しており、Operaはバージョン6の頃から正確に配置できていたようだ。Firefoxはバージョン2.0になってもまだ修正されていない。(IEもそうだが。)文中で画像をフロートにして左右に寄せるなどはありそうなシチュエーションなので、floatプロパティを使いにくくするバグだと思った。

転載元リソース情報

URI
http://elastic965.80code.com/blog/2006/12/float2
作成日
2006年12月25日

2008年5月19日

案内

広告

広告

このページについてつぶやく コメント一覧