层叠上下文初识 - 利用 chrome devTools 实现 css性能优化

层叠上下文初识 - 利用 chrome devTools 实现 css性能优化

MDN:堆栈上下文

参考博客:

在浏览器的元素渲染过程中,除了水平的 XY 布局,还有一条沿着相对于用户的假想 Z 轴。

在水平的 XY 布局中,有 块级上下文(BFC) 等绘制规则,而在 Z 轴上,有 层叠上下文(stacking context) 的绘制规则。

在某些时候,我们对某些元素使用 z-index ,导致某些元素的呈现顺序受其 z-index 值影响。发生这种情况是因为这些元素具有特殊的属性,这些属性导致它们形成了 层叠上下文。从而可以根据 z-index 指定 Z 轴的优先级。

层叠上下文(stacking context,MDN 官网称之为 堆叠上下文,此文统称 层叠上下文

层叠上下文

如何形成层叠上下文

在以下情况下,文档中的任何元素 只要拥有以下条件之一 即可形成堆叠上下文:

根元素:

  • 文档的根元素(<html>)。

position

  • 值为absolute 或者relative ,并且z-index的值不为auto的元素。
  • 值为 fixedsticky的元素(sticky可用于所有移动浏览器,但不适用于较旧的桌面浏览器)。

容器:

  • 元素是flex容器的子元素,并且其z-index的值不是auto
  • 元素是grid容器的子元素,并且其z-index值不是auto

opacity

其他:

  • 具有以下任一属性的元素,并且其值不是 none
    • transform
    • filter(滤镜)
    • perspective
    • clip-path(裁剪)
    • mask/ mask-image/mask-border
    • mix-blend-mode的值不是normal的元素。
  • 属性isolation(隔离)的值为isolate的元素。(该属性就是可以主动申请一个 层叠上下文)

以下为当前兼容性不足或者不推荐的但能生成 层叠上下文 的技术:

  • 属性-webkit-overflow-scrolling的值touch为的元素。
  • 属性will-change值不为初始值的元素(重要提示: will-change旨在用作最后手段,以尝试解决现有的性能问题。不应将其用于预期性能问题。)。
  • 属性contain的值layout,或者paint,或包括它们中的一个复合值(即contain: strictcontain: content)。(**这是一项实验性技术,**请在生产中使用它之前仔细检查浏览器兼容性表。)

综上:

  • 层叠上下文可以被其他层叠上下文包含,并一起创建层叠上下文的层次结构

  • 每个层叠上下文和其兄弟独立开来;处理层叠上下文时仅考虑后代元素

  • 每个层叠上下文都是独立的,将元素的内容堆叠之后,将按照父层叠上下文的堆叠顺序考虑整个元素;

    **注意:**比较堆叠顺序时,将只比较同级 DOM 的堆叠顺序,相同情况下再考虑子元素,直到一方比另一方大。

层叠顺序

别被吓到了,总结下来就一句话:谁大谁上,后来居上

Demo 1

考虑如下两个div

<body>
    <div id="a">
        <div id="a1"></div>
        <div id="a2">
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值