« hasLayoutのバグ回避 | メイン | hasLayoutのバグ回避(その2) »

zoomプロパティとol要素の表示(バグ)

Internet Explorerの独自拡張であるzoomプロパティをつかうと、以下のようなバグがある。

  • 番号が1しかつかなかったり
  • 番号表示が消える

番号が1しかつかなくなるのは、IE5.5以上。

<ol>
<li>1番目のリスト</li>
<li>2番目のリスト</li>
<li>3番目のリスト</li>
</ol>
<ul>
<li>リスト</li>
<li>リスト</li>
<li>リスト</li>
</ul>

に以下のようなCSSを適用した場合。

li{
        zoom : 1;
}

これをIE7,IE6,IE5.5,IE5.0で閲覧したときは以下のようになる。

IE7
IE7の場合は番号表示は1のみ
IE6
IE6の場合は番号表示は1のみ
IE5.5
IE5.5の場合は番号表示は1のみ
IE5
IE5の場合は番号表示は1から3までちゃんとある

番号表示が消えてしまうのはIE6とIE7。HTMLは先ほどと同じモノを使い、CSSの指定を、以下のようにする。

ol{
        zoom : 1;
}
IE7
IE7の場合は番号表示が消える
IE6
IE6の場合は番号表示が消える
IE5.5
IE5.5の場合は番号表示が消えていない
IE5.0
IE5.0の場合は番号表示が消えていない

IE5.5の挙動を見る限り、数字表示部分がずれているがこれとも関係するのか?

IE6とIE7で消えてしまった番号を出すために、左側にpaddingをとる。

ol{
        zoom : 1;
        padding-left : 2em;
}
IE7
IE7で正しく番号表示されている
IE6
IE6で正しく番号表示されている

ユニバーサルセレクタでzoom : 1;とした場合は、li要素、ol要素とも含まれるので、IE6とIE7では、両方のバグを抱えることになる。これを解消するために、以下のようなCSSを記述する。

*{
	zoom : 1;
}
ol{
	padding-left : 2em;
}
ol li{
	zoom : normal;
}

ブラウザの余白リセットを要素ごとにリセットする場合でも、olとliは含めていると思うので、そのついでに、zoom : 1;と書いてしまうとやはり表示がおかしくなる。この場合も、ユニバーサルセレクタでの対応と同じようにCSSを記述する。

なお、今回確認した環境は、以下の通り。

  • WindowsXP + IE7 (メインマシン)
  • WindowsXP + IE6 (VMWare)
  • WindowsMe + IE5.5 (VMWare)
  • Windows2000 + IE5.0 (VMWare)

トラックバック

このエントリーのトラックバックURL:
http://hpbuilder.net/weblog/tb-hpb.cgi/2516

コメントを投稿

書いている人

About

2007年08月06日 20:38に投稿されたエントリーのページです。

1つ前のエントリー:「hasLayoutのバグ回避

次のエントリー:「hasLayoutのバグ回避(その2)

おさんぽさんぽ・メインページへ