Давайте пройдемося по тому, що відбувається. Для початку зверніть увагу, що 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 щодо контексту укладання