position: fixed 失效

若子孙元素是position: fixed,则当其某一祖先元素创建了层叠上下文(Stacking Context,也称为堆叠上下文),则该子孙元素的固定定位将基于该祖先元素进行定位,而不是基于 Viewport,因此固定定位失效了。

参考MDN - 层叠上下文open in new window,可以看到其中有很多方式能够让元素创建层叠上下文,但不是每一种方式都会导致position: fixed失效。

  • transform属性不为none
  • perspective属性不为none
  • filter属性不为none
  • 设置了transform-style: preserve-3d
  • will-change中指定了任意 CSS 属性

以上任意一种创建层叠上下文的方式,都会导致position: fixed失效。

参考文档: