CSS 伪元素:before&:after 与z-index 的问题

--问题:父子级都设置了position:absolute,各自设置了z-index,但没生效

--解决:父元素不设置z-index值,伪元素设置负z-index 值,父元素位移效果不使用transform

简单说下原因:

  • 同一个层叠上下文里面, 层叠顺序从后向前依次是: 背景和边框、负z-index、块级盒、浮动盒、行内盒、z-index:0、正z-index.
  • 伪元素相当于子元素,也就是包含在元素内的,二者不在同一个层叠上下文中。

如果想实现层叠效果,需要元素和对应的伪元素在同一层叠上下文中,所以不能让元素创建层叠上下文。以下情况会创建层叠上下文

  • 即便是 position 不为 static 的元素, 如果没有指定一个非 auto 值的 z-index, 该元素就不会建立一个层叠上下文。
  • 元素的transform值不是none

当然还有其他情况本文就不列出了,因为transform 会创建层叠上下文,所以缓动的时候只能使用top 进行变换了。

这里有点的是,top bottom 等属性如果没有设置初始值transition是不会生效的,所以代码中设置了初始值top:0

你可能感兴趣的:(css,html,html5)