Mit der Transformationseigenschaft wird der Z-Index gelöscht und vorne angezeigt. (Beim Auskommentieren von -webkit-transform funktioniert der Z-Index im folgenden Code ordnungsgemäß.)
.test {
width: 150px;
height: 40px;
margin: 30px;
line-height: 40px;
position: relative;
background: white;
-webkit-transform: rotate(10deg);
}
.test:after {
width: 100px;
height: 35px;
content: "";
position: absolute;
top: 0;
right: 2px;
-webkit-box-shadow: 0 5px 5px #999;
/* Safari and Chrome */
-webkit-transform: rotate(3deg);
/* Safari and Chrome */
transform: rotate(3deg);
z-index: -1;
}
<html>
<head>
<title>transform</title>
<link rel="stylesheet" type="text/css" href="transformtest.css">
</head>
<body>
<div class="test">z-index is canceled.</div>
</body>
</html>
Wie arbeiten Transformation und Z-Index zusammen?
Antworten:
Lassen Sie uns durch das Geschehen gehen. Beachten Sie zunächst, dass
z-index
auf positionierten Elementen undtransform
selbst neue " Stapelkontexte " auf Elementen erstellt werden. Folgendes ist los:Ihr
.test
Element hattransform
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 hatz-index: -1
, die Einstellung der Stapelebene der.test:after
im Stapel Rahmen der.test
Einstellungz-index: -1
auf.test:after
nicht legen es nicht hinter ,.test
weilz-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 neuez-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; /* Safari and Chrome */ -webkit-transform: rotate(3deg); /* Safari and Chrome */ 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 Stapelkontextquelle
Stellen Sie das Div ein, auf das Sie oben bleiben möchten
position:relative
quelle
Hatte ein ähnliches Problem, wo Geschwister waren
transform: translate()
undz-index
nicht arbeiten würden.Die einfachste Lösung besteht darin,
position: relative
alle Geschwister einzustellen und dannz-index
wieder zu arbeiten.quelle
Schnellkorrektur: Sie können das andere Element auch um 0 Grad drehen.
quelle
transform:rotate(0.0rad)
behoben. Ich konnte es nicht über eine CSS-Regel anwenden, es musste direkt auf dem Element sein. Das macht keinen Sinn, aber danke, dass du die Antwort gepostet hast, die mich dazu gebracht hat, es zu versuchen.Ich stand vor dem ähnlichen Problem. Ich habe dem Test ein Wrapper-Div hinzugefügt und dem Wrapper-Div die Transformationseigenschaft gegeben.
.wrapper{ transform: rotate(10deg); }
Hier ist die Geige http://jsfiddle.net/KmnF2/16/
quelle
Stellen Sie das Div, das Sie oben behalten möchten, auf Position: absolut
quelle