position: fixed设置z-index不能覆盖之前的

博客介绍了CSS中元素层级显示的问题。当b是a的子孙节点,a与c同级,设置b的position为fixed且z-index为999时,c会显示在b层之上。解决办法是给与c同层的a元素设置大于c的z-index,问题原因是“从父原则”。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<div class="a">
  ...
    <div class="b"> </div>
  ...
</div>
<div class="c"> </div>

b是a的子孙节点,a与c同级。设置b的style为position: fixed; z-index: 999,这时候发现,c会显示在b层之上,类似这种效果:
请添加图片描述

![请添加图片描述](https://img-blog.csdnimg.cn/b360cea9a8b04e5a91a1c20c4482ff11.png

给与c元素同层的a元素设置大于c的z-index就能解决这个问题。

解决完成效果图:
请添加图片描述
问题原因:
“从父原则”,这个从父原则,其实就相当于是同级的dom元素会先比较层级先后,然后在一个元素内部会再依次逐层比较层级先后。

### z-index 属性在 `position: fixed` 和 `position: sticky` 中的行为 对于具有 `position: fixed` 的元素,这些元素被移除标准文档流并相对于视口定位。这意味着即使页面滚动,固定位置的元素也会保持在同一视觉位置[^1]。 当涉及到层叠上下文(stacking context),`position: fixed` 创建一个新的层叠上下文,只要设置了 `z-index` 值不是 auto,则该元素及其子代将在其创建的新层叠上下文中渲染。因此,在大多数情况下,带有正数 `z-index` 的 `fixed` 定位元素覆盖其他未设置高优先级 `z-index` 或者默认 `static`/`relative` 定位的内容。 另一方面,`position: sticky` 是一种相对定位形式,它基于用户的滚动动作来决定何时变为固定定位。sticky 元素在其父容器内按照正常布局流动直到达到指定的阈值点之后表现得像 `position: fixed` 一样粘附于最近的祖先边界框上[^3]。 关于 `z-index` 行为的关键区别在于: - **Fixed**: 总是相对于整个浏览器窗口建立新的堆栈环境;如果指定了非自动 `z-index` ,那么这个新形成的堆栈将独立存在于全局层面之上。 - **Sticky**: 只有当满足特定条件 (即达到了设定好的偏移量) 后才会形成局部性的堆栈环境,并且这种变化是在原有层次结构内部发生的而不是跳出到顶层。 为了更好地理解两者间的不同之处,下面提供了一个简单的 HTML/CSS 示例用于展示这两种定位方式下 `z-index` 如何影响显示顺序: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Position Fixed vs Sticky Z Index Example</title> <style> .container { height: 200vh; background-color: lightblue; } /* Position Fixed */ .box-fixed { width: 100px; height: 100px; background-color: red; position: fixed; top: 50%; left: 50%; margin-top: -50px; /* Half of height */ margin-left: -50px; /* Half of width */ z-index: 999; } /* Position Sticky */ .box-sticky { width: 100px; height: 100px; background-color: green; position: -webkit-sticky; /* For Safari */ position: sticky; top: 10px; z-index: 1000; } </style> </head> <body> <div class="container"> <div class="box-fixed"></div> Scroll down... <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <div class="box-sticky">I'm sticky!</div> </div> </body> </html> ``` 在这个例子中,红色方块代表 `position: fixed` 而绿色方块表示 `position: sticky`. 尽管两个盒子都设定了较高的 `z-index`,但是由于它们分别属于不同的层叠上下文(`fixed` 对应的是全局而 `sticky` 则依赖于它的包含块),所以最终呈现出来的效果可能会有所不同取决于具体的浏览情况和其他样式规则的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值