You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何position:relative的div会显示在position:fixed的div之上?

代码示例

CSS 代码

.green {
  width: 50px;
  height: 250px;
  background-color: green;
  position: fixed;
}

.red {
  width: 100px;
  height: 100px;
  background-color: red;
  position: relative;
}

.blue {
  width: 100px;
  height: 100px;
  background-color: blue;
}

HTML 代码

<div class="green">
</div>
<div>
  <div>
    <div class="red"></div>
  </div>
  <div>
    <div class="blue"></div>
  </div>
</div>
问题
  • 理论上position:fixed的绿色矩形应处于所有元素最上层,红色(position:relative)和蓝色方块应在其下方,但实际红色方块却显示在绿色矩形上方,这是什么原因?
  • 当将蓝色方块的opacity设置为非1的值(例如0.9)时,它也会显示在绿色矩形上方,这又是为什么?
原因解析

这两个现象的核心都是**CSS层叠上下文(Stacking Context)**的规则导致的,和元素的层叠顺序计算逻辑直接相关:

1. 红色方块覆盖绿色的原因

  • 绿色元素设置position:fixed会创建独立的层叠上下文,但它是根层叠上下文(<html>)的直接子元素。
  • 红色元素的外层容器(绿色的同级<div>)在HTML结构中后于绿色元素出现。在同一层叠上下文(根上下文)中,同级元素的层叠顺序由出现顺序决定:后出现的元素会覆盖先出现的元素。
  • 红色元素虽然只是position:relative,但它属于这个后出现的容器内部,因此整个容器的渲染层级高于绿色元素,红色自然显示在绿色上方。

2. 蓝色元素设置opacity<1后覆盖绿色的原因

  • 当元素的opacity值小于1时,会触发创建新的层叠上下文。
  • 和红色的情况同理,蓝色元素所在的外层容器是绿色的同级且后出现,容器本身的渲染层级高于绿色。蓝色元素创建自己的层叠上下文后,在容器内部的层级足够高,最终就会覆盖绿色元素。

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:21:19