このjsFiddleを確認してください。
IE7 では、上記の jsFiddle のコードは(.sbOptions)
、次の selectbox 要素の下にドロップダウンを表示します(.sbHolder)
。
.sbOptions
はありますz-index: 100;
が、まだ の下に表示されています.sbHolder
。
これは IE7 を除くすべてのブラウザで正常に動作しますが、これを解決する方法はありますか?
このjsFiddleを確認してください。
IE7 では、上記の jsFiddle のコードは(.sbOptions)
、次の selectbox 要素の下にドロップダウンを表示します(.sbHolder)
。
.sbOptions
はありますz-index: 100;
が、まだ の下に表示されています.sbHolder
。
これは IE7 を除くすべてのブラウザで正常に動作しますが、これを解決する方法はありますか?
IE7 にはエラーがあります。z -indexを設定せず、hasLayout が true に設定されている限り、配置された要素にスタック コンテキストが割り当てられます。.sbHolder の幅と高さは、そのような hasLayout トリガーです。したがって、2 番目の .sbHolder が一番上にあります。
IE7 はルールを次のように変更します。
.sbHolder {
position: relative;
width: 130px;
height: 30px;
display: block;
margin-bottom: 20px;
z-index: 0; /* ! */
}
これは、.sbOptions が .sbHolder の不規則なスタック コンテキストによってキャッチされるため、.sbOptions の z-index を増やす計画を台無しにします。
一度に .sbOptions が 1 つだけドロップされるという点で、IE <=7 の解決策があります。これはスクラッチになりますか?そう願いましょう!
試してみてください: http://jsfiddle.net/HRubx/
必要に応じて、不規則なスタック コンテキストが生成されるようになりました。
li:hover {
position: relative;
}
マークアップをあまり変更できない場合は、上記のように親の div に z-index を追加してください。
<div class="sbHolder" style="z-index:11">
<a href="#" class="sbToggle"></a>
<a href="#" class="sbSelector">1</a>
<ul class="sbOptions">
<li><a href="#1">1</a></li>
<li><a href="#2">2</a></li>
<li><a href="#3">3</a></li>
<li><a href="#4">4</a></li>
</ul>
</div>
<div class="sbHolder" style="z-index:10">
<a href="#" class="sbToggle"></a>
<a href="#" class="sbSelector">A</a>
<ul class="sbOptions">
<li><a href="#1">A</a></li>
<li><a href="#2">B</a></li>
<li><a href="#3">C</a></li>
<li><a href="#4">D</a></li>
</ul>
</div>
この記事を見てください。
つまり、jquery を使用して、他の要素を変更して z-index を並べ替えます。
IE7 に関する多くの問題を修正する 1 つの方法は、ページ上の要素のデフォルトの z-index スタック順を動的に逆にすることです。これにより、HTML ソースの上位にある要素ほど、ページの z-index 順序も高くなり、IE スタックの問題のほとんどが解決されます。
$(function() {
var zIndexNumber = 1000;
$('div').each(function() {
$(this).css('zIndex', zIndexNumber);
zIndexNumber -= 10;
});
});