学級日誌番外 (ホームページ作成ノウハウ集)
>>> 学級日誌番外トップ
11.IE6のCSSバグ対策 (2008年6月29日)
- ◎環境
- ・Internet Explorer6
- ◎解説
- 2008年4月~6月まで、ホームページを全面リニューアルした際に遭遇したIE6におけるCSSのバグをまとめてみた。
ネットで検索すると他にもたくさん出てくるが、今回はマサが独断で選んだ5つを紹介する。
(1)マージンが2倍になるバグ(IE6) |
フロートと同じ方向にマージンを指定するとマージンの幅が2倍になる。 解決方法>> 「display:inline;」を付け加えるか、 空白の指定に marginではなく paddingを使用する。 div#box { float: right; margin-right: 20px; display: inline; ←追加する } |
(2)selectタグがレイヤー最前面に表示されるバグ(IE6) |
IE6では、selectタグが z-indexプロパティ(レイヤーの重なり順を指定)を無視して表示される。 その為、レイヤーを重ねて背面にフォーム等のプルダウンメニューを配置しても、最前面に表示されてしまう。 解決方法>> 最前面レイヤーと selectタグの間に、インラインフレーム(iframe)を配置する。 #mask_select { margin: 0px; padding: 0px; width: 760px; height: 84px; position: absolute; left: 0px; top: 0px; display: block; z-index: 1; ←最前面レイヤーの z-index=2,selectタグの z-index=0の場合 } <!--[if IE 6]><iframe id="mask_select"></iframe><![endif]-->注)IE6のみ iframeを有効にする |
(3)clearプロパティを指定したボックスの内側上部に隙間が空くバグ(IE6,IE7) |
clearプロパティによりフロートを解除したボックスに上ボーダーを配置すると、そのボックスの上部に 隙間が空くことがある。 (clearプロパティを指定したボックスの直前に、フロートが存在しない場合は隙間は空かない) 解決方法>> clearプロパティを指定する要素に、widthまたは heightプロパティを 指定する。 |
(4)imgタグ(置換要素)を含む行の前後ではline-heightプロパティで指定した値より小さくなるバグ(IE6) |
行間を line-heightで指定しているテキスト中に imgタグがあると行間が指定値より狭くなる。 解決方法>> 行間の指定を line-height → line-height+marginにする。 li { font-size: 12px; line-height: 150%; } li { font-size: 12px; margin: 3px 0px; line-height: 100%; } |
(5)class属性が有効にならない(これは仕様であり、バグではありません) |
CSSは基本的には後に書かれたもの(読み込まれたもの)が優先されるが、そうならない場合がある。 解説>> CSSの優先順位は、セレクタの獲得ポイントで決まる。 獲得ポイントが少なければ、classや IDを指定していても有効にならない場合がある。 -------------------------------- *(全称セレクタ) 0ポイント p,h1などのタグ 1ポイント .text(classの場合) 10ポイント #header(IDの場合) 100ポイント -------------------------------- (例) p.text = 1+10 = 11ポイント .text p = 10+1 = 11ポイント .text li p = 10+1+1 = 12ポイント #header .text = 100+10 = 110ポイント #header .text p = 100+10+1 = 111ポイント ポイントはセレクタを並べることで加算されていき、ポイントが同じならば後に書いたスタイルが優先される。 解決方法>> <div id="header"> <ul class="text"> <li>~</li> <li class="text_sub">~</li> ・・・このリストだけ違うスタイルを適用させる <li>~</li> </ul> </div> .text li { } ← 11ポイント .text_sub { } ← 10ポイント 「.text li」よりポイントが少ないため無視される .text li { } ← 11ポイント #header .text_sub { } ← 110ポイント 「.text li」よりポイントが多いため有効となる |
>>> マサがお勧めするCSSの本 (by Amazon.co.jp)