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

为何含view-transition-name的元素会渲染在position:fixed元素之上?

关于View Transition元素堆叠层级的疑问

示例代码

CSS

div {
  width: 50px;
  height: 50px;
  border: solid 2px black;
}

.fixed {
  position: fixed;
  top: 25px;
  left: 25px;
  background-color: red;
}

.named {
  background-color: green;
  view-transition-name: something;
}

HTML

<div class="fixed"></div>
<div class="named"></div>

疑问点

我了解的规则是:在同一堆叠上下文中,定位元素会渲染在非定位元素之上。

根据规范描述:

在视图过渡期间被捕获的元素,或任何时候view-transition-name计算值不为none的元素:

  • 形成堆叠上下文。
  • 在3D变换中被扁平化。
  • 形成背景根。

规范里没提到带有view-transition-name的元素会变成定位元素,但上面的示例里绿色元素(带view-transition-name)却渲染在红色固定定位元素之上,这让我搞不懂原因。

解答

这是因为堆叠上下文的层级排序规则:当元素各自创建独立的堆叠上下文时,它们的渲染层级并非单纯由是否为定位元素决定,而是由堆叠上下文的创建顺序(文档流中的出现顺序)主导。

具体来说:

  • 固定定位元素会创建自己的堆叠上下文
  • view-transition-name不为none的元素同样会创建独立的堆叠上下文

在你的示例中,绿色的.named元素在HTML结构中晚于红色.fixed元素出现,后创建的堆叠上下文层级更高,因此会覆盖在固定定位元素之上。

如果调整HTML结构,将.named放在.fixed之前,红色固定元素就会覆盖绿色元素,这也能验证这个逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:25:00