2020-10-14 开发日记

151 阅读1分钟

绝对定位和相对定位使盒子脱离文档流,同时有了堆叠属性

    今天在开发新页面的时候,遇到了一个有趣的小问题,查了一下资料基本是了解了原因。

问题大致如下:页面的header有一个沿升出来的背景A,考虑使用对header的绝对定位position:absolute,再加上bottom的负值直接解决。但是发现这么做后,在背景A上面的两块内容,B和C,B可以正常显示,C确不能。

**直接原因:**自己比较了B和C的区别,发现B因为内部有一个绝对定位,所以在最外层加了position:relative。正是因为这个样式,使之后覆盖在背景A上的内容,正常显示了。

思考:为什么加了position:relative的内容,可以覆盖在头部绝对定位的背景上面呢?

查找资料:

position:

** z-index:**

大致分析:

1 position默认是static,在文档常规流中。这个时候z-index是无效的。

2 当背景A使用position:absolute后,移出正常文档流,z-index虽然没有设置,但是默认值是z-inde: auto生效,这时候背景A会覆盖在正常文档流上方。

3 当组件B使用position:relative后,虽然在正常文档流保留了位置,但是z-index: auto也生效了,就有了堆叠层级,两个值相同,下层元素覆盖在了上层元素的上面,所以组件B就显示了出来。

4 当组件C没有使用position的时候,默认是position:static,在正常文档流中,就被绝对定位和相对定位的元素覆盖了。