z-index属性在什么情况下会失效?
参考答案:
通常 z-index 的使用是在有两个重叠的标签,在一定的情况下控制其中一个在另一个的上方或者下方出现。z-index值越大就越是在上层。z-index元素的position属性需要是relative,absolute或是fixed。
z-index属性在下列情况下会失效:
- 父元素position为relative时,子元素的z-index失效。解决:父元素position改为absolute或static;
- 元素没有设置position属性为非static属性。解决:设置该元素的position属性为relative,absolute或是fixed中的一种;
- 元素在设置z-index的同时还设置了float浮动。解决:float去除,改为
display:inline-block;
20230116,有小伙伴补充:
- 在手机端
iOS 13系统中,-webkit-overflow-scrolling:touch也会使z-index失效,将touch换成unset
具体原因可参考这篇文章: 为什么我的 z-index 又不生效了?
题目要点:
z-index 属性用于控制元素的堆叠顺序,但有时会出现失效的情况。以下是一些常见的导致 z-index 失效的原因:
没有设置
position属性:z-index仅对设置了position属性(absolute、relative、fixed或sticky)的元素有效。
z-index值不在范围内:z-index可以取负值,但必须在position属性设置后才能生效。
元素被隐藏:
- 如果元素的
visibility属性设置为hidden,或者display属性设置为none,则z-index不会生效。
- 如果元素的
z-index值相同:- 如果多个元素的
z-index值相同,它们的堆叠顺序将按照它们在文档流中的顺序决定。
- 如果多个元素的
z-index值被覆盖:- 如果父元素的
z-index值较高,可能会覆盖子元素的z-index。
- 如果父元素的
元素是
position: static:- 静态定位的元素(
position: static)不会创建新的层级,因此z-index不会生效。
- 静态定位的元素(
元素在不同的堆叠上下文:
- 堆叠上下文(Stacking Context)可以被创建,例如通过
opacity、transform等属性,这会影响z-index的效果。
- 堆叠上下文(Stacking Context)可以被创建,例如通过
考察重点
- 理解:z-index 的工作原理和限制。
- 应用:能够正确设置 z-index 以控制元素的堆叠顺序。