随笔 - 66,  文章 - 0,  评论 - 0,  阅读 - 28882

什么是堆叠上下文?

堆叠上下文是 HTML 元素的三维概念,这些 HTML 元素在一条假想的相对于面向(电脑屏幕的)视窗或者网页的用户的 z 轴上延伸,HTML 元素依据其自身属性按照优先级顺序占用层叠上下文的空间。

以下12种情况可以产生堆叠上下文。

  • 根元素 (HTML),
  • z-index 值不为 "auto"的 绝对/相对定位,
  • 一个 z-index 值不为 "auto"的 flex 项目 (flex item),即:父元素 display: flex|inline-flex,
  • opacity 属性值小于 1 的元素(参考 the specification for opacity),
  • transform 属性值不为 "none"的元素,
  • mix-blend-mode 属性值不为 "normal"的元素,
  • filter值不为“none”的元素,
  • perspective值不为“none”的元素,
  • isolation 属性被设置为 "isolate"的元素,
  • position: fixed
  • 在 will-change 中指定了任意 CSS 属性,即便你没有直接指定这些属性的值
  • -webkit-overflow-scrolling 属性被设置 "touch"的元素

tips

  1. -webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效果,这样更自然,像是原生效果。
  2. touch 使用具有回弹效果的滚动, 当手指从触摸屏上移开,内容会继续保持一段时间的滚动效果。继续滚动的速度和持续的时间和滚动手势的强烈程度成正比。同时也会创建一个新的堆栈上下文。所以我们一般会在需要滚动的元素上面加:-webkit-overflow-scrolling: touch; 这个 css 属性。但是有当子元素有 fixed 定位时,fixed 定位会失效。

position:fixed为什么失效?

  1. 经过学习,发现position:fixed 和 absolute都可以失效,失效的原因是创建了堆叠上下文,该元素会影响其子元素的固定定位。设置了 position:fixed 的子元素将不会基于 viewport视口 定位,而是基于这个父元素。
  2. 排查了一下发现是页面中用了一个公司内部封装的scrollview组件中,有z-index 值不为 "auto"的 绝对/相对定位符合这条,于是弹窗弹起来的时候,将scrollview的父级div设置为position:visible,关闭再设为position:absolute
posted on   蒸汽小工人  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示