Давайте пройдемося по тому, що відбувається. Для початку зверніть увагу, що z-indexна позиціонованих елементах і transformсам по собі створює нові " контексти складання " на елементах. Ось що відбувається:
Ваш .testелемент transformвстановив щось інше, ніж нічого, що надає йому власний контекст стекування.
Потім ви додаєте .test:afterпсевдоелемент, який є дочірнім елементом .test. У цієї дитини z-index: -1, встановивши рівень стека .test:after в штабелирования контексті.test Установка z-index: -1на .test:afterне ставить його позаду , .testтому що z-indexмає сенс тільки в межах даного контексту штабелювання.
Коли ви видаляєте -webkit-transformз .testнього, видаляє його контекст стекування, викликаючи .testі .test:afterділитися контекстом стекування (що <html>) та змушуючи .test:afterвідставати .test. Зверніть увагу , що після видалення .test«s -webkit-transformправил Ви можете ще раз дати йому свій власний контекст стек, встановивши нове z-indexправило (будь-яке значення) .test(знову ж , тому що він розташований)!
То як ми можемо вирішити вашу проблему?
Щоб з-індекс працював так, як ви очікували, переконайтеся, що .testі .test:afterподіляєте той самий контекст стекування. Проблема в тому, що ви хочете .testобертати за допомогою перетворення, але це означає створення власного контексту стекування. На щастя, розміщення .testв контейнері для упаковки та обертання, яке все одно дозволить своїм дітям ділитися контекстом укладання, одночасно обертаючи обидва.
Ось з чого ви почали: http://jsfiddle.net/fH64Q/
І ось спосіб ви можете обійти контексти укладання та зберегти обертання (зауважте, що тінь трохи обрізається через .testбілий фон):
.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>
Є й інші способи зробити це, навіть кращі способи. Я, мабуть, зробив би фон "post-it" вміщуючим елементом, а потім помістив текст всередину, що, мабуть, було б найпростішим методом і зменшило б складність того, що у вас є.
Ознайомтесь із цією статтею, щоб отримати докладнішу інформацію про z-indexпорядок укладання та порядок укладання, або робочі характеристики W3C CSS3 щодо контексту укладання