Przejdźmy przez to, co się dzieje. Na początek zwróć uwagę, że z-index
na pozycjonowanych elementach i transform
samodzielnie utwórz nowe „ konteksty układania ” ” na elementach. Oto co się dzieje:
Twój .test
żywioł matransform
ustawiony na coś innego niż none, co daje mu własny kontekst stosu.
Następnie dodajesz .test:after
pseudoelement, który jest dzieckiem .test
. To dziecko ma z-index: -1
, ustawienie poziomu stosu .test:after
w kontekście stosu.test
Ustawienie z-index: -1
on .test:after
nie powoduje umieszczenia go za nim, .test
ponieważz-index
ma znaczenie tylko w danym kontekście układania.
Po usunięciu -webkit-transform
z .test
niego usuwa kontekst układania, powodując .test
i .test:after
udostępniając kontekst układania (kontekst <html>
) i .test:after
przechodząc za nim .test
. Zauważ, że po usunięciu reguły .test
' -webkit-transform
możesz ponownie nadać jej własny kontekst stosu, ustawiając nową z-index
regułę (dowolną wartość) na .test
(ponownie, ponieważ jest ustawiona)!
Jak więc rozwiążemy Twój problem?
Aby indeks Z działał zgodnie z oczekiwaniami, upewnij się, że .test
i .test:after
udostępniaj ten sam kontekst stosu. Problem polega na tym, że chcesz .test
obracać z transformacją, ale zrobienie tego oznacza utworzenie własnego kontekstu stosowego. Na szczęście umieszczenie .test
w opakowaniu do owijania i obracanie, które nadal pozwoli jego dzieciom udostępniać kontekst układania, jednocześnie obracając oba.
Oto, od czego zacząłeś: http://jsfiddle.net/fH64Q/
A oto sposób na obejście kontekstów układania i utrzymanie rotacji (zwróć uwagę, że cień jest nieco odcinany z powodu .test
białego tła):
.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>
Są na to inne sposoby, nawet lepsze. Prawdopodobnie uczyniłbym tło "post-it" elementem zawierającym, a następnie umieściłbym tekst w środku, to prawdopodobnie byłaby najłatwiejsza metoda i zmniejszyłaby złożoność tego, co masz.
Zapoznaj się z tym artykułem, aby uzyskać więcej informacji na temat z-index
kolejności układania w stosy lub działającej specyfikacji W3C CSS3 dotyczącej kontekstu układania