2012-03-19 4 views
1

私はIE7のz-indexスタッキングバグを実行していますが、回避する方法が見つかりません。IE7 z-indexスタッキングバグ - どのように絶対配置された2つの要素を正しく積み重ねるのですか?

<!doctype html /> 
<html> 
<head> 
</head> 
<body> 
<div style="position:relative; width:500px;"> 
    <div style="position:absolute; top:0; left:30px; width:300px; height:30px; border:1px solid #ff0000;"> 
     <p style="margin:0;">Menu</p> 
     <ul style="position:absolute; z-index:100; list-style:none; margin:0; padding:0; background-color:#fff; border:1px solid #0000ff;"> 
      <li><a href="#">Menu Item</a></li> 
      <li><a href="#">Menu Item</a></li> 
      <li><a href="#">Menu Item</a></li> 
      <li><a href="#">Menu Item</a></li> 
      <li><a href="#">Menu Item</a></li> 
      <li><a href="#">Menu Item</a></li> 
     </ul> 
    </div> 
    <div style="position:absolute; z-index:1; top:40px; width:500px; height:75px; background-color:#ccc;"> 
     <p>Header</p> 
    </div> 
</div> 
</body> 
</html> 

この例では、トップレベルdivに絶対配置された要素が2つあることがわかります。最初のメニューはメニューで、2番目のメニューはヘッダーです。メニュー項目は正しく積み重ねられず、ヘッダーの後ろに表示されます。

Screenshot

私はIE7のzインデックスバグに関する記事をたくさん読んだが、私はこの特定の問題で私を助け何かを発見していません。ありがとう!

+0

''有効なDOCTYPEではありません。代わりに '<!DOCTYPE html>'を使用してください。これにより、IEがquirksmodeを使用できなくなります。 – Zeta

答えて

4

これはIE7とz-indexのよくある問題です。ここに私が答えた以前の質問への参照があります。

Text overlapping items in Dropdown items

かいつまんHEADERボックスとメニューボックスがsibingsであれば、あなたはそれらの上のzインデックスを設定する必要があります。メニュー項目にZ-索引のみを設定すると、IE7は機能しません。

<div style="position:absolute; top:0; left:30px; width:300px; height:30px; border:1px solid #ff0000;"> 

上記のDIVは、重複している子を含む兄弟であるため、高いz-インデックスが必要です。

ある意味では、IE7では親要素が子にz-indexを与える必要があります。技術的には正しいわけではありませんが、このように言ったり理解したりする方が簡単です。ここで

はフィドルです:<!DOCTYPE HTML />http://jsfiddle.net/JT9tw/

0

確かにliはヘッダの後ろにあります。あなたの李はヘッダーよりも高いZインデックスを持っているのがいいです。しかし、リは別のスタックの子供たちです。そのスタックのZ-インデックスは0です。 これは、自分自身のZ-indexが0である要素の中で、自分自身のZ-インデックスが100でないことを意味します。 ヘッダーは、z = index 1の別のスタックで、他のdiv(およびその子)の上にあります。

0

親要素の位置はrelativeに設定し、絶対配置された要素は表示を設定する必要があります。

関連する問題