使用z-index
时,为什么绝对定位的伪元素会丢失其transition
?
小提琴: http://jsfiddle.net/RyanWalters/jNgLL/
发生了什么事?
当您点击li
时,它会向左滑动,而不会更改任何z-index
值。但是,:after
内容会弹出li
。
会发生什么?
我希望它会隐藏在li
之后。
CSS(简化了一点,请参阅完整示例的小提琴):
li {
position: relative;
transition: transform 0.2s;
}
li.active {
transform: translateX(-100px);
}
li:after {
position: absolute;
top: 0;
right: 0;
z-index: -1;
content: "Yada yada";
}
为什么:after
内容不会落后于li
?
答案 0 :(得分:5)
我在w3.org上发现了这个,我认为这解释了它:http://www.w3.org/TR/css3-transforms/#effects
转换的除“none”以外的任何值都会导致堆叠上下文和包含块的创建。该对象充当固定位置后代的包含块。
据我了解,您的li:after
伪元素位于li.active
元素的堆叠上下文中,因此无法显示在其后面。
答案 1 :(得分:5)
@ BernzSed的回答是正确的。不过,这是一个解决方案:
使用带有<li>
的{{1}}(或任何其他元素)将内容包含在<div>
内,然后psuedo元素上的position: relative
将强制它落后儿童元素。
以下是基本代码:
<强> HTML:强>
z-index: -1
<强> CSS:强>
<ul>
<li><div>This is the first item</div></li>
</ul>
示例:http://jsfiddle.net/shshaw/jNgLL/3/
另外有趣的是:如果你使用li,
li div {
position: relative;
}
li:after {
position: absolute;
z-index: -1;
}
psuedo元素,则不需要:before
,因为它已经属于堆叠顺序中的z-index: -1
子元素。< / p>