En utilisant la propriété transform, z-index est annulé et est apparu à l'avant. (Lorsque vous commentez -webkit-transform, z-index fonctionne correctement dans le code ci-dessous)
.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>
Comment la transformation et le z-index fonctionnent-ils ensemble?
Voyons ce qui se passe. Pour commencer, notez que z-index
sur les éléments positionnés et transform
créent par eux-mêmes de nouveaux " contextes d'empilement " sur les éléments. Voici ce qui se passe:
Votre .test
l'élément a transform
défini sur autre chose que none, ce qui lui donne son propre contexte d'empilement.
Vous ajoutez ensuite un .test:after
pseudo-élément, qui est un enfant de .test
. Cet enfant a z-index: -1
, définissant le niveau de pile de .test:after
dans le contexte d'empilement de .test
Réglage z-index: -1
sur .test:after
ne le place pas derrière .test
car z-index
n'a de sens que dans un contexte d'empilement donné.
Lorsque vous supprimez -webkit-transform
de .test
il supprime son contexte d'empilement, provoquant .test
et .test:after
pour partager un contexte d'empilement (celui de <html>
) et faire .test:after
aller derrière .test
. Notez qu'après avoir supprimé .test
's -webkit-transform
règle vous pouvez, encore une fois, lui donner son propre contexte d'empilement en définissant un nouveau z-index
règle (n'importe quelle valeur) sur .test
(encore une fois, car il est positionné)!
Alors, comment pouvons-nous résoudre votre problème?
Pour que le z-index fonctionne comme prévu, assurez-vous que .test
et .test:after
partage le même contexte d'empilement. Le problème est que vous voulez .test
tourné avec transform, mais cela signifie créer son propre contexte d'empilement. Heureusement, en plaçant .test
dans un conteneur d'emballage et en rotation qui permettra toujours à ses enfants de partager un contexte d'empilement tout en tournant les deux.
Voici ce que vous avez commencé: http://jsfiddle.net/fH64Q/
Et voici un moyen de contourner les contextes d'empilement et de conserver la rotation (notez que l'ombre est un peu coupée à cause de .test
fond blanc):
.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>
Il y a d'autres façons de le faire, même de meilleures façons. Je ferais probablement de l'arrière-plan "post-it" l'élément contenant, puis je mettrais le texte à l'intérieur, ce serait probablement la méthode la plus simple et réduirait la complexité de ce que vous avez.
Consultez cet article pour plus de détails sur z-index
et l'ordre d'empilement, ou la spécification W3C CSS3 de travail sur le contexte d'empilement
Solution rapide: vous pouvez également faire pivoter l'autre élément de 0 degré également.
Définissez le div sur lequel vous souhaitez rester en haut position:relative
J'étais confronté au même problème. Ce que j'ai fait, j'ai ajouté une div wrapper autour du test et donné la propriété transform à la div wrapper.
.wrapper{
transform: rotate(10deg);
}
voici le violon http://jsfiddle.net/KmnF2/16/
A eu un problème similaire où les frères et sœurs étaient transform: translate()
'd et z-index
ne fonctionnerait pas.
La solution la plus simple consiste à définir position: relative
sur tous les frères et sœurs, puis z-index
fonctionnerait à nouveau.