2016-07-19 5 views
0

Ich habe das Problem, dass Z-Index ist nicht so einfach wie es klingt.Z-Index Stapelkontext

Nachdem ich im Grunde alles gelesen hatte, was ich darüber fand, konnte ich immer noch keine Lösung finden. So, hier ist mein Problem:

JSFiddle

<div id="first"> 
<div id="middlelayer"> 
    2 
</div> 
</div> 
<div id="second"> 
    <div id="toplayer"> 
    1 
    </div> 
    <div id="lowestlayer"> 
    3 
    </div> 
</div> 

Ich möchte ein Div einer anderen Elternteil (#middlelayer) zwischen zwei anderen Divs (#toplayer und #lowestlayer) zu sitzen. Ich habe mit im Grunde jede Kombination von z-Indizes experimentend und auch versucht, die Abhilfe mit einer Undurchsichtigkeit: .99 hier beschrieben:

https://philipwalton.com/articles/what-no-one-told-you-about-z-index/

Nichts schien so weit zu arbeiten, ich hoffe, dass Sie mir helfen können.

Vielen Dank im Voraus!

+0

als @M aharkus schrieb - einfacher z-index 1 bis 3 sollte funktionieren. Vielleicht wird das Problem durch die Positionierung der Eltern verursacht? Aktualisieren Sie dann jfiddle. – matcygan

Antwort

2

.toplayer { 
 
    width: 120px; 
 
    background-color: green; 
 
    position: fixed; 
 
    z-index: 3; 
 
} 
 

 
#middlelayer { 
 
    width: 140px; 
 
    background-color: blue; 
 
    position: fixed; 
 
    z-index: 2; 
 
} 
 

 
#lowestlayer { 
 
    width: 160px; 
 
    background-color: yellow; 
 
    position: fixed; 
 
}
<div id="first" >  
 
     <div id="middlelayer"> 
 
      middle 
 
     </div> 
 
</div> 
 
<div id="second"> 
 
    <div id="second2"> 
 
       <div id="lowestlayer"> 
 
        low 
 
       </div>  
 
       <div class="toplayer"> 
 
        top     
 
       </div> 
 
    </div> 
 
</div>

Habe ich nur z-index:1 zu z-index:3 zu jedem der Elemente, und es scheint, um die gewünschte Wirkung zu erzeugen.

EDIT:

entfernt JSFiddle aus meiner Antwort und ersetzt es mit einem Code-Schnipsel.

+0

Ich glaube, ich habe beim Erstellen der Frage ein wenig zu viel vereinfacht. Aber Ihr Ergebnis ist genau das, was ich erreichen möchte! Siehst du einen Weg, um es für diese Geige möglich zu machen? Grundsätzlich gibt es nur ein weiteres Div in # Sekunde. https://jsfiddle.net/jgbfhv1x/1/ Vielen Dank! – BlackandScholes

+0

http://jsfiddle.net/jgbfhv1x/4/ vielleicht wird dies helfen – Maharkus

+0

ja, das hat den Trick, danke! – BlackandScholes

0

Ich denke, das ist, was Sie brauchen. Bitte überprüfen Sie den folgenden Code.

#lowestlayer { 
 
    opacity: .99; 
 
} 
 

 
#lowestlayer, #middlelayer, #toplayer { 
 
    position: absolute; 
 
    width: 100px; 
 
    color: white; 
 
    line-height: 100px; 
 
    text-align: center; 
 
} 
 

 
#lowestlayer { 
 
    z-index: 1; 
 
    top: 20px; 
 
    left: 20px; 
 
    background: red; 
 
    width: 200px; 
 
    height: 200px; 
 
} 
 

 
#middlelayer { 
 
    top: 45px; 
 
    left: 45px; 
 
    background: green; 
 
    z-index: 2; 
 
    width: 150px; 
 
    height: 150px; 
 
} 
 

 
#toplayer { 
 
    top: 70px; 
 
    left: 70px; 
 
    background: blue; 
 
    z-index: 3; 
 
    width: 100px; 
 
    height: 100px; 
 
}
<div id="first"> 
 
<div id="middlelayer"> 
 
    2 
 
</div> 
 
</div> 
 
<div id="second"> 
 
    <div id="toplayer"> 
 
    1 
 
    </div> 
 
    <div id="lowestlayer"> 
 
    3 
 
    </div> 
 
</div>

+0

Ich glaube, ich habe beim Erstellen der Frage ein wenig zu viel vereinfacht. Aber Ihr Ergebnis ist genau das, was ich erreichen möchte! Siehst du einen Weg, um es für diese Geige möglich zu machen? Grundsätzlich gibt es nur ein weiteres Div in # Sekunde. https://jsfiddle.net/jgbfhv1x/1/ Vielen Dank! – BlackandScholes

1

Es scheint kein z-index Problem, sondern eine der Positionierung zu sein. Da Sie die Position fixed verwenden, denken Sie daran, dass die Elemente relativ zum Ansichtsfenster positioniert werden. Um das Ergebnis, das Sie wollen, auf top, eins auf bottom einzustellen, und für die letzte (die zentriert werden muss) verwenden Sie diesen kleinen Trick namens absolute centering.

Hier ist ein Beispiel, das Sie auf JSFiddle sehen ...

https://jsfiddle.net/kennethcss/smejLps4/

Update:

Wenn das gewünschte Ergebnis einfach ist die Elemente auf "Layer" müssen Sie nur anwenden z-index wie so ...

JSFiddle

+0

Ja, ich weiß was du meinst. Vielen Dank für Ihre Antwort. Ich lege einfach alle Divs nach oben, so dass sie gestapelt erscheinen, wenn der Z-Index richtig eingestellt ist. Ich denke, meine Frage war ein bisschen ungenau. – BlackandScholes

+0

Dies behebt das Problem in Ihrer letzten Geige ... https://jsfiddle.net/kennethcss/ucmdo8g1/ Im Grunde haben Sie eine Klasse statt einer ID zu 'toplayer' hinzugefügt. –

+0

Ja, das hat funktioniert, danke! – BlackandScholes

Verwandte Themen