Lassen Sie uns durch das Geschehen gehen. Beachten Sie zunächst, dass z-index
auf positionierten Elementen und transform
selbst neue " Stapelkontexte " auf Elementen erstellt werden. Folgendes ist los:
Ihr .test
Element hat transform
sich auf etwas anderes als keines gesetzt, wodurch es einen eigenen Stapelkontext erhält.
Sie fügen dann ein .test:after
Pseudoelement 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: -1
auf .test:after
nicht legen es nicht hinter , .test
weil z-index
nur innerhalb eines bestimmten Stapel Kontext eine Bedeutung hat.
Wenn Sie entfernen -webkit-transform
aus .test
es seinen Stapelkontext entfernt, wodurch .test
und .test:after
einen Stapelkontext zu teilen (das von <html>
) und machen .test:after
unterwegs hinten .test
. Beachten Sie, dass Sie nach dem Entfernen .test
der -webkit-transform
Regel erneut einen eigenen Stapelkontext festlegen können, indem Sie eine neue z-index
Regel (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, .test
und verwenden Sie .test:after
denselben Stapelkontext. Das Problem ist, dass Sie .test
mit Transformation gedreht werden möchten , dies jedoch bedeutet, dass ein eigener Stapelkontext erstellt wird. Glücklicherweise können die untergeordneten Elemente .test
in 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 .test
weiß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-index
Stapelreihenfolge oder zur funktionierenden W3C CSS3-Spezifikation zum Stapelkontext