Repasemos lo que está ocurriendo. Para empezar, tenga z-indexen cuenta que en elementos posicionados y transformpor sí mismo crea nuevos " contextos de apilamiento " en elementos. Esto es lo que está pasando:
Su .testelemento se ha transformestablecido en algo diferente a ninguno, lo que le da su propio contexto de apilamiento.
Luego agrega un .test:afterpseudo-elemento, que es hijo de .test. Este hijo tiene z-index: -1, establecer el nivel de pila .test:after dentro del contexto de apilamiento de.test Setting z-index: -1on .test:afterno lo coloca detrás .testporque z-indexsolo tiene significado dentro de un contexto de apilamiento dado.
Cuando eliminas -webkit-transformde .testél, se elimina su contexto de apilamiento, lo que provoca .testy .test:aftercomparte un contexto de apilamiento (el de <html>) y hace que se .test:afterquede atrás .test. Tenga en cuenta que después de eliminar .testla -webkit-transformregla puede, una vez más, darle su propio contexto de apilamiento estableciendo una nueva z-indexregla (cualquier valor) en .test(nuevamente, porque está posicionada).
Entonces, ¿cómo resolvemos tu problema?
Para obtener z-index de trabajo de la forma esperada, asegúrese de que .testy .test:aftercompartir el mismo contexto de pila. El problema es que desea .testrotar con transform, pero hacerlo significa crear su propio contexto de apilamiento. Afortunadamente, colocarlo .testen un contenedor de envoltura y rotarlo permitirá que sus hijos compartan un contexto de apilamiento al mismo tiempo que rotan ambos.
Esto es lo que empezó con: http://jsfiddle.net/fH64Q/
Y aquí hay una forma en que puede sortear los contextos de apilamiento y mantener la rotación (tenga en cuenta que la sombra se corta un poco debido al .testfondo blanco):
.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>
Hay otras formas de hacer esto, incluso mejores formas. Probablemente haría del fondo "post-it" el elemento que lo contiene y luego pondría el texto dentro, que probablemente sería el método más fácil y reduciría la complejidad de lo que tienes.
Consulte este artículo para obtener más detalles sobre el z-indexorden de apilamiento, o la especificación W3C CSS3 de trabajo sobre el contexto de apilamiento