层叠上下文

什么是层叠上下文?

层叠上下文是HTML中的一个三维概念。可以简单的理解为一个元素如果具备某些特定CSS属性就会成为一个层叠上下文元素,拥有层叠上下文具备的一些特性。这个元素在Z轴上就“高人一等”,最终表现就是它离屏幕观察者更近。

如何成为层叠上下文元素?

  • 根元素(HTML)
  • position:relative/position:absolute 且z-index不为auto
  • position值为fixed/sticky
  • z-index值不为auto的flex项目(父元素display:flex|inline-flex,子元素z-index不为auto,子元素构成层叠上下文元素).
  • 元素的opacity值小于1.
  • 元素的transform值不是none.
  • 元素mix-blend-mode值不是normal.(混合模式:设置元素的含量应如何与元素的父的内容和元素的背景融为一体)
  • 元素的filter值不是none.(滤镜:模糊与饱和度)
  • 元素的isolation值是isolate.(隔离mix-blend-mode元素的混合。)
  • will-change指定的属性值为上面任意一个。(增强页面渲染性能)
  • 元素的webkit-overflow-scrolling设为touch.(用来控制元素在移动设备上是否使用滚动回弹效果.)

成为层叠上下文后具备哪些特性?

  • 层叠上下文的层叠水平要比普通元素高;
  • 层叠上下文可以阻断元素的混合模式;CSS3 层叠上下文与mix-blend-mode混合模式阻隔实例页面
  • 层叠上下文可以嵌套,内部层叠上下文及其所有子元素均受制于外部的层叠上下文。
  • 每个层叠上下文和兄弟元素独立,也就是当进行层叠变化或渲染的时候,只需要考虑后代元素。
  • 每个层叠上下文是自成体系的,当元素发生层叠的时候,整个元素被认为是在父层叠上下文的层叠顺序中。

什么是层叠水平?

层叠水平(层叠的等级)决定了同一个层叠上下文中元素在z轴上的显示顺序。
普通元素的层叠等级优先由其所在的层叠上下文决定。
层叠等级的比较只有在当前层叠上下文元素中才有意义。不同层叠上下文中比较层叠等级是没有意义的。

什么是层叠顺序?

层叠顺序. 表示元素发生层叠时候有着特定的垂直显示顺序,注意,层叠顺序是规则。

[图片上传失败...(image-dcd07a-1548228089163)]

  • 每一个层叠顺序规则适用于一个完整的层叠上下文元素。
  • 左上角"层叠上下文background/border"指的是层叠上下文元素的背景和边框。
  • 给元素只设置position:absolute/relative属性,该元素的z-index为auto仍是普通元素但是该元素在层叠顺序中和position:absolute/relative z-index:0; 处于同一等级
  • 不支持z-index的层叠上下文元素相当与z-index:0等级

层叠准则

1、谁大谁上:当具有明显的层叠水平标示的时候,如识别的z-indx值,在同一个层叠上下文领域,层叠水平值大的那一个覆盖小的那一个。
2、后来居上:当元素的层叠水平一致、层叠顺序相同的时候,在DOM流中处于后面的元素会覆盖前面的元素。

如何清晰判断出元素层叠顺序

  • 1、首先先看要比较的两个元素是否处于同一个层叠上下文 如果是,谁的层叠等级大谁在上面(层叠等级的大小根据"层叠顺序"图比较) 如果两个元素不在同一层叠上下文,往上找到他们所处的同一层叠上下文进行比较
  • 2、当两个元素层叠等级相同、层叠顺序相同时,在DOM结构中后面的元素层叠等级在前面的元素
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容