Lassen Sie uns durch das Geschehen gehen. Beachten Sie zunächst, dass z-indexauf positionierten Elementen und transformselbst neue " Stapelkontexte " auf Elementen erstellt werden. Folgendes ist los:
Ihr .testElement hat transformsich auf etwas anderes als keines gesetzt, wodurch es einen eigenen Stapelkontext erhält.
Sie fügen dann ein .test:afterPseudoelement hinzu, das ein Kind von ist .test. Dieses Kind hat z-index: -1, die Einstellung der Stapelebene der .test:after im Stapel Rahmen der.test Einstellung z-index: -1auf .test:afternicht legen es nicht hinter , .testweil z-indexnur innerhalb eines bestimmten Stapel Kontext eine Bedeutung hat.
Wenn Sie entfernen -webkit-transformaus .testes seinen Stapelkontext entfernt, wodurch .testund .test:aftereinen Stapelkontext zu teilen (das von <html>) und machen .test:afterunterwegs hinten .test. Beachten Sie, dass Sie nach dem Entfernen .testder -webkit-transformRegel erneut einen eigenen Stapelkontext festlegen können, indem Sie eine neue z-indexRegel (einen beliebigen Wert) aktivieren .test(erneut, da sie positioniert ist)!
Wie lösen wir Ihr Problem?
Stellen Sie sicher, dass der Z-Index wie erwartet funktioniert, .testund verwenden Sie .test:afterdenselben Stapelkontext. Das Problem ist, dass Sie .testmit Transformation gedreht werden möchten , dies jedoch bedeutet, dass ein eigener Stapelkontext erstellt wird. Glücklicherweise können die untergeordneten Elemente .testin einen Verpackungsbehälter gelegt und gedreht werden, sodass sie weiterhin einen Stapelkontext gemeinsam nutzen können, während beide gedreht werden.
Folgendes haben Sie begonnen: http://jsfiddle.net/fH64Q/
Und hier ist eine Möglichkeit, wie Sie die Stapelkontexte umgehen und die Rotation beibehalten können (beachten Sie, dass der Schatten aufgrund des .testweißen Hintergrunds etwas abgeschnitten wird ):
.wrapper {
-webkit-transform: rotate(10deg);
}
.test {
width: 150px;
height: 40px;
margin: 30px;
line-height: 40px;
position: relative;
background: white;
}
.test:after {
width: 100px;
height: 35px;
content: "";
position: absolute;
top: 0;
right: 2px;
-webkit-box-shadow: 0 5px 5px #999;
-webkit-transform: rotate(3deg);
transform: rotate(3deg);
z-index: -1;
}
<div class="wrapper">
<div class="test">z-index is canceled.</div>
</div>
Es gibt andere Möglichkeiten, dies zu tun, sogar bessere. Ich würde wahrscheinlich den "Post-It" -Hintergrund zum enthaltenden Element machen und dann den Text einfügen, das wäre wahrscheinlich die einfachste Methode und würde die Komplexität Ihrer Inhalte verringern.
In diesem Artikel finden Sie weitere Informationen zur z-indexStapelreihenfolge oder zur funktionierenden W3C CSS3-Spezifikation zum Stapelkontext