問題は、IE7 以前では、相対的に配置されたアイテム内の z-index を基本的に「リセット」することです。
これらのいずれも機能しない場合は、以下の「最後の手段」を参照してください
したがって、IE では、この場合、BAR は IE7 の不十分なインデックス作成方法で FOO より上になります。
<div style="position:relative;">
<div style="position:absolute; z-index:1000;">FOO</div>
</div>
<div style="position:relative;">
<div style="position:absolute; z-index:1;">BAR</div>
</div>
回避策も同様に不十分です。一番上にしたいアイテムの親が、一番下にしたいアイテムの親よりも高い z インデックスになっていることを確認する必要があります。
<div style="position:relative; z-index:2;">
<div style="position:absolute; z-index:1000;">FOO</div>
</div>
<div style="position:relative; z-index:1">
<div style="position:absolute; z-index:1;">BAR</div>
</div>
または、HTML で最初に来るものを入れ替えて、一方を他方の上にレンダリングすることができます。
<div style="position:relative;">
<div style="position:absolute; z-index:1;">BAR</div>
</div>
<div style="position:relative;">
<div style="position:absolute; z-index:1000;">FOO</div>
</div>
注: これはすべて、オーバーラップの原因となっている FOO と BAR を使用して何かを行っていることを前提としています。私の例は明らかに重複していないので、コピーして完全に貼り付けた場合、効果はわかりにくいでしょう。
追加した:
ザ ラスト リゾート
簡単に言えば、このオプションは最低です。ただし、IE7 以前でこの問題に絶対に対処する必要がある場合は、これが唯一のオプションです。
JavaScript を使用して div を移動し、必要な場所に配置します。ここでの基本的な考え方は、絶対配置された div をボディ ノードに引き出して、必要な場所に移動することです。jQuery を使用してこれらすべてを行うことを強くお勧めします。サンプル コードは jQuery を使用せずに作成しましたが、まだ jQuery を使用していない場合は、開始する必要があります。この作業は数行で完了します。
<body>
<div style="position:relative; z-index:2;">
OUTERFOO
<div style="position:absolute; z-index:1000; background:red;">
FOO
</div>
</div>
<div style="position:relative; z-index:1">
OUTERBAR
<div id="bar" style="position:absolute; top:-30px; z-index:1; background:green;">
BAR
</div>
</div>
<button onclick="moveThisCrapForIE7();">Test</button>
<script type="text/javascript" language="javascript">
// Probably best to kick this off when your body is totally loaded.
// jQuery's $(document).ready is really good for that.
// for now I'm just using a button to test.
function moveThisCrapForIE7() {
// You'll need something more reliable for browser detection here, this will only get IE7 not IE6.
// I'd recommend jQuery for everything really. It'll save you miles of code.
if(navigator.appVersion.indexOf('MSIE 7') > -1) {
// Get your element and move it to where you want it.
var bar = document.getElementById('bar');
document.body.appendChild(bar);
//Then you'll need to monkey with the location
// to make sure it's where you want it.
bar.style.top = '15px';
bar.style.left = '90px';
bar.style.zIndex = '3';
}
}
</script>
</body>