デフォルトの位置にあるdiv
(つまりposition:static
)とdiv
位置にあるfixed
があります。
要素のzインデックスを設定すると、固定要素を静的要素の後ろに置くことは不可能に思えます。
#over {
width: 600px;
z-index: 10;
}
#under {
position: fixed;
top: 5px;
width: 420px;
left: 20px;
border: 1px solid;
height: 10%;
background: #fff;
z-index: 1;
}
<!DOCTYPE html>
<html>
<body>
<div id="over">
Hello Hello HelloHelloHelloHelloHello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
</div>
<div id="under">
</div>
</body>
</html>
またはここjsfiddleに: http://jsfiddle.net/mhFxf/ /
静的要素にposition:absolute
を使用することでこれを回避することができますが、誰でも教えてもらえます なぜ これは起こっていますか?
(これと似たような質問があるようです( Fixed Positioning breaking z-index )が、満足のいく答えがないので、ここで私の例のコードでこれを求めています)
この問題はいくつかの方法で解決できますが、実際には、スタッキング規則を知っていると、自分に最適な答えを見つけることができます。
<html>
要素はあなたの唯一のスタッキングコンテキストなので、スタッキングコンテキスト内のスタッキング規則に従うだけで、要素はこの順序でスタックされることがわかります。
- スタッキングコンテキストのルート要素(この場合は
<html>
要素)- 負のz-index値を持つ位置付けられた要素(およびその子)(高い値は小さい値の前にスタックされ、同じ値を持つ要素はHTMLの外観に従ってスタックされます)
- 配置されていない要素(HTMLの外観順)
- Autoのz-index値を持つ位置付けられた要素(およびその子)(HTMLでは外観順)
- 正のz-index値を持つ位置付けられた要素(およびその子)(高い値は小さい値の前にスタックされ、同じ値を持つ要素はHTMLの外観に従ってスタックされます)
だからあなたはできる
#under
の位置に-ve z-indexが位置のない#over
要素の後ろに現れるようにします。#over
の位置をrelative
に設定します。要素の重なり順を変更する前に、開発者は次のことを知っておく必要があります。
<html>
要素はルート要素であり、最初のスタッキングコンテキストです。以下のスタッキング順序とスタッキングコンテキストルールはこのリンクからのものです
<html>
要素)の場合要素の順序
<html>
要素が唯一のスタッキングコンテキストですが、どの要素もスタッキングコンテキストのルート要素になることができます。上記の規則を参照してください)。#overにposition: relative;
を追加してください
#over {
width: 600px;
z-index: 10;
position: relative;
}
#under {
position: fixed;
top: 5px;
width: 420px;
left: 20px;
border: 1px solid;
height: 10%;
background: #fff;
z-index: 1;
}
<!DOCTYPE html>
<html>
<body>
<div id="over">
Hello Hello HelloHelloHelloHelloHello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
</div>
<div id="under"></div>
</body>
</html>
z-index は特定のコンテキスト、つまりrelative
、fixed
、またはabsolute
の位置内でのみ機能します。
z-index 相対divの場合、/は絶対または固定divのz-index
とは関係ありません。
_編集_ これは不完全な答えです。 この回答は誤った情報を提供します。下記の@ Dansingermanのコメントと例を確認してください。
あなたのover
divにはポジショニングがないので、z-indexはそれをどこにどのように配置するのか(そして何に関しては?)を知りません。あなたのover divの位置をrelativeに変えるだけで、そのdivには副作用がなくなり、アンダーdivはあなたの意志に従います。
これがjsfiddleの例です。 Fiddle
編集 :誰かがすでにこの答えに言及しているのを見た!
#under
を負のz-index
にします。 -1
これは、z-index
プロパティがposition: static;
では無視されるために起こります。ですから、あなたが書いたCSSコードでは、z-index
でどのくらい高く設定しても、1
は両方の要素に対して#over
です。
#under
に負の値を与えることによって、それはあらゆるz-index: 1;
要素、すなわち#over
の後ろにあります。
ナビゲーションメニューを作成していました。私はナビゲーションのCSSにoverflow: hidden
があり、すべてが隠されています。私はそれがz-index問題であると思いました、しかし、私は本当に私のナビの外ですべてを隠していました。
要素が通常の流れの外側に配置されている場合、それらは他の要素と重なることがあります。
http://web.archive.org/web/20130501103219/http://w3schools.com/css/css_positioning.asp 上の重複要素のセクションに従ってください。
cSS仕様で定義されている固定要素(および絶対要素)の動作
それらは、ドキュメントから切り離され、最も近い固定/絶対配置の親に配置されるときに動作します。 (Word by Wordではない)
これはzindexの計算を少し複雑にします。私はbody要素の中に動的にコンテナーを作成し、そのようなすべての要素(そのbody-level要素の中に "my-fixed-ones"として分類される)を移動することによって私の問題を解決しました(同じ状況) )