Css层叠上下文--个人总结

本文详细阐述了层叠上下文的概念及其形成条件,包括绝对/相对定位元素、Flex项目等。并通过实例说明了如何理解元素在层叠上下文中的渲染顺序。

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

二、形成条件
1、根元素(HTML)
2、Z-index值不为auto的绝对/相对定位
3、一个z-index值不为auto的flex项目(flex item),即:父元素display: flex|inline-flex;
4、Opacity属性值小于1的元素
5、Transform属性值不为none的元素
6、Mix-blend-mode属性值不为normal的元素
7、Filter值不为none的元素
8、Perspective值不为none的元素
9、Isolation属性被设置为isolate的元素
10、Position:fixed
11、在will-change中指定了任意css属性,即便没有直接指定这些属性的值
12、-webkit-overflow-scrolling属性被设置touch元素

在层叠上下文中,其子元素同样也按照上面解释的规则进行层叠。特别值得一提的是,其子元素的z-index值只在父级层叠上下文中有意义。子级层叠上下文被自动视为父级层叠上下文的一个独立单元。

三、总结
1、给一个HTML元素定位和z-index赋值创建一个层叠上下文,(opacity值不为1的也是相同)
2、层叠上斜纹可以包含在其他层叠上下文中,并且一起创建一个有层级的层叠上下文
3、每个层叠上下文完全独立于它的兄弟元素:当处理层叠时只考虑子元素
4、每个层叠上下文是自包含的:当元素的内容发生层叠后,整个元素将会在父层叠上下文中按照顺序进行层叠。

四、示例
这里写图片描述

1、在这个例子中,每个被定位的元素都创建了独自的层叠上下文,因为他们被制定了定位属性和z-index属性。层叠上下文的层级如下:
这里写图片描述

2、DIV#4,DIV #5 和 DIV #6 是 DIV #3 的子元素,所以它们的层叠完全在 DIV #3 中被处理。一旦 DIV #3 中的层叠和渲染处理完成,DIV #3 元素作为一个整体传递给 root 元素,并相对兄弟元素层叠。
3、 DIV#4 被渲染在 DIV #1 之下,因为 DIV #1 的 z-index (5) 在 root 元素的层叠上下文中生效,而 DIV #4 的 z-index (6) 在 DIV #3 的层叠上下文中生效。因此,DIV #4 在 DIV #1 之下,因为 DIV #4 归属于 z-index 值较低的 DIV #3 元素。
4、由此可得 DIV #2 (z-index 2) 被渲染在 DIV #5 (z-index 1) 之下,因为 DIV #5 归属于 z-index 较高的 DIV #3 元素。
5、DIV#3 的 z-index 值是 4,但是这个值独立于 DIV #4,DIV #5 和 DIV #6 的 z-index 值,因为他们从属于不同的层叠上下文。
6、分辨出层叠的元素在 Z 轴上的渲染顺序的一个简单方法是将它们想象成一系列的版本号,子元素是其父元素版本号之下的次要版本。通过这个方法我们可以轻松得看出为什么一个 z-index 为 1 的元素(DIV #5)层叠于一个 z-index 为 2 的元素(DIV #2)之上,而一个 z-index 为 6 的元素(DIV #4)层叠于 z-index 为 5 的元素(DIV #1)之下。在我们的例子中(依照最终渲染次序排列):
这里写图片描述

参考:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值