今天在改bug的时候遇到了个z-index的问题,怎么都调试不好,然后就上网百度
bug: 一个div元素下两个子元素,其中一个子元素fixed定位,另一个没有办法执行click方法
原来谷歌浏览器在设置position:fixed;后会触发元素创建一个新的层叠上下文,并且当成一个整体在父层叠上下文中进行比较。1
2
3<div class="a">
<div class="b"></div>
</div>
如上面的dom结构,当给b设置了position:fixed;属性后,会触发创建一个新的层叠上下文,它的父层叠上下文变成了a,所以b只能在a的内部进行层叠比较。这也就是大家熟听的“从父原则”。
所以本来所有元素都在root内比较,改为fixed之后只能在父级元素内比较,而父级元素没有设置z-index,所以无法比较。
所以解决方案是给父级元素设置z-index,一般设置为0就可以了。
tips:
- z-index只有在设置了position为relative,absolute,fixed时才会有效。
- z-index的“从父原则”。当你发现把z-index设的多大都没用时,看看其父元素是否设置了有效的z-index,当然别忘了先看看自身是否设置了position。