Hãy xem qua những gì đang xảy ra. Để bắt đầu, hãy lưu ý rằng z-index
trên các phần tử được định vị và transform
tự nó tạo ra " bối cảnh xếp chồng " mới trên các phần tử. Đây là những gì đang xảy ra:
.test
Phần tử của bạn đã transform
đặt thành thứ gì đó khác hơn là không có, điều này tạo cho nó ngữ cảnh xếp chồng riêng.
Sau đó, bạn thêm một .test:after
phần tử giả, là phần tử con của .test
. Con này có z-index: -1
, thiết lập mức ngăn xếp .test:after
trong ngữ cảnh xếp chồng của.test
Setting z-index: -1
on .test:after
không đặt nó phía sau .test
vì z-index
chỉ có ý nghĩa trong ngữ cảnh xếp chồng nhất định.
Khi bạn xóa -webkit-transform
khỏi .test
nó, nó sẽ xóa bối cảnh xếp chồng của nó, gây ra .test
và .test:after
chia sẻ bối cảnh xếp chồng (của <html>
) và làm .test:after
tụt hậu .test
. Lưu ý rằng sau khi loại bỏ .test
's -webkit-transform
cai trị bạn có thể, một lần nữa, cho nó bối cảnh sắp xếp riêng của mình bằng cách thiết lập một mới z-index
quy tắc (bất kỳ giá trị) trên .test
(một lần nữa, bởi vì nó được định vị)!
Vì vậy, làm thế nào để chúng tôi giải quyết vấn đề của bạn?
Để chỉ số z hoạt động theo cách bạn mong đợi, hãy đảm bảo điều đó .test
và .test:after
chia sẻ cùng một ngữ cảnh xếp chồng. Vấn đề là bạn muốn .test
xoay với chuyển đổi, nhưng làm như vậy có nghĩa là tạo bối cảnh xếp chồng của riêng nó. May mắn thay, việc đặt .test
trong một hộp đựng và xoay sẽ vẫn cho phép các con của nó chia sẻ bối cảnh xếp chồng trong khi xoay cả hai.
Đây là những gì bạn đã bắt đầu: http://jsfiddle.net/fH64Q/
Và đây là một cách bạn có thể đi xung quanh các bối cảnh xếp chồng và giữ nguyên vòng quay (lưu ý rằng bóng bị cắt đi một chút do .test
nền trắng):
.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>
Có nhiều cách khác để làm điều này, thậm chí là những cách tốt hơn. Tôi có lẽ sẽ làm cho nền "post-it" trở thành phần tử chứa và sau đó đặt văn bản vào bên trong, đó có lẽ sẽ là phương pháp dễ dàng nhất và sẽ làm giảm độ phức tạp của những gì bạn có.
Xem bài viết này để biết thêm chi tiết về z-index
và thứ tự xếp chồng hoặc thông số kỹ thuật CSS3 của W3C hoạt động trên ngữ cảnh xếp chồng