Repasemos lo que está ocurriendo. Para empezar, tenga z-index
en cuenta que en elementos posicionados y transform
por sí mismo crea nuevos " contextos de apilamiento " en elementos. Esto es lo que está pasando:
Su .test
elemento se ha transform
establecido en algo diferente a ninguno, lo que le da su propio contexto de apilamiento.
Luego agrega un .test:after
pseudo-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: -1
on .test:after
no lo coloca detrás .test
porque z-index
solo tiene significado dentro de un contexto de apilamiento dado.
Cuando eliminas -webkit-transform
de .test
él, se elimina su contexto de apilamiento, lo que provoca .test
y .test:after
comparte un contexto de apilamiento (el de <html>
) y hace que se .test:after
quede atrás .test
. Tenga en cuenta que después de eliminar .test
la -webkit-transform
regla puede, una vez más, darle su propio contexto de apilamiento estableciendo una nueva z-index
regla (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 .test
y .test:after
compartir el mismo contexto de pila. El problema es que desea .test
rotar con transform, pero hacerlo significa crear su propio contexto de apilamiento. Afortunadamente, colocarlo .test
en 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 .test
fondo 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-index
orden de apilamiento, o la especificación W3C CSS3 de trabajo sobre el contexto de apilamiento