Hãy xem qua những gì đang xảy ra. Để bắt đầu, hãy lưu ý rằng z-indextrên các phần tử được định vị và transformtự 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:
.testPhầ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:afterphầ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: -1on .test:afterkhông đặt nó phía sau .testvì z-indexchỉ có ý nghĩa trong ngữ cảnh xếp chồng nhất định.
Khi bạn xóa -webkit-transformkhỏi .testnó, nó sẽ xóa bối cảnh xếp chồng của nó, gây ra .testvà .test:afterchia sẻ bối cảnh xếp chồng (của <html>) và làm .test:aftertụt hậu .test. Lưu ý rằng sau khi loại bỏ .test's -webkit-transformcai 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-indexquy 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 đó .testvà .test:afterchia sẻ cùng một ngữ cảnh xếp chồng. Vấn đề là bạn muốn .testxoay 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 .testtrong 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 .testnề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-indexvà 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