当元素被设置成fixed的时候,会创建新的层叠上下文,设置z-index只能在当前的层级上下文做比较,而无法跨层级比较。举个例子,以下的DOM结构 伪代码
<app>
<div fixed>
<dialog fixed z-index=2002>
</div>
</app>
<modal fixed z-index=2001></modal>
以上结构中,modal和div都被定义成fixed ,他们两个都创建了新的层叠上下文环境。
所以dialog的 z-index应该是在div的层叠上下文中比较。而伪代码中 把外层modal和dialog进行比较,实际上这两者不再同一个层叠上下文中,是没办法比较的。
我们能做的,只能是把div和modal做比较,如下
<app>
<div fixed z-index= 2002>
<dialog fixed z-index=2002>
</div>
</app>
<modal fixed z-index=2001></modal>
此时div 就会比modal在更上面,否则如果不添加zindex在div上,modal永远会在div及其子元素上层。
所以正确的做法,如果想要遮罩层modal在dialog之下,应该改成下面这样
<app>
<div fixed> // div的fixed有无都无所谓
<dialog fixed z-index=2002>
<modal fixed z-index=2001></modal>
</div>
</app>