IE8では、親要素の重なり順が優先される。(IE6,IE7でも同様)これにより生じるz-indexのバグを回避するためには、以下のように対処する。
IE8でバグが発生してしまう書き方の例と回避方法
(IE以外では問題なくz-index:1000を指定したdivが1番上に表示される)
<div style="position:relative;"> <div style="position:absolute;z-index:1000;"> 上に表示したいdiv </div> </div> <div style="position:relative;"> <div style="position:absolute;z-index:1;"> 下に表示させたいdiv </div> </div>
↓親要素のz-indexで重なり順を設定すると、問題が解決する。
<div style="position:relative;z-index:2;">★ <div style="position:absolute;z-index:1000;"> 上に表示したいdiv </div> </div> <div style="position:relative;z-index:1;">★ <div style="position:absolute;z-index:1;"> 下に表示させたいdiv </div> </div>
IE8ではposition属性にrelativeやabsoluteを指定するとz-indexが初期化されてしまうため、親要素で重なり順を決めることで回避できる。 この他に、jsファイルを使って動的にz-indexをしている場合はCSSで直接指定する方法に変えることで問題が解決する場合もある。