正文
当你为 DOM 元素设置了定位后,该元素的 z-index 就会生效,默认为 auto,你可以简单将它等同于 z-index: 0,比如:
demo 地址
,
也就是说,z-index 生效的前提条件是必须要设置定位属性(或者一些 CSS3 属性),才能够生效。
看完 demo 你可能会觉得纳闷,为啥我单单只设置了一个 position 属性,没设置 z-index 值,为啥红色方格会覆盖蓝色方格,这里就涉及到了 z-index 层叠水平的知识。
层叠水平(stacking level)
一个 DOM 元素,在不考虑层叠上下文的情况下,会按照层叠水平决定元素在 z 轴上的显示顺序,
通俗易懂地讲,不同的 DOM 元素组合在一起发生重叠的时候,它们的的显示顺序会遵循层叠水平的规则,而 z-index 是用来调整某个元素显示顺序,使该元素能够上浮下沉。
那么层叠水平是什么样的呢?下面就是著名的 7 阶层叠水平(stacking level)
可以看出,层叠水平规范了元素重叠时候的呈现规则,有了这个规则,我们也就不难解释为何之前例子中红色方格会覆盖蓝色方格。
因为当你设置了 position: relative 属性后,元素 z-index:auto 生效导致层叠水平提升,比普通内联元素来的高,所以红色方格会显示在上方。
知道了层叠水平的规则后,下面我就举几个例子来说明:
inline/inline-block 元素高于浮动元素
首先是 inline/inline-block 元素高于浮动元素:
demo 地址
可以很清晰的看出文字(inline元素)覆盖了图片(浮动元素)。
inline/inline-block 元素高于 block 元素
demo 地址
红色方格(inline-block)覆盖绿色方格(block),但是由于文字(display:block)属于 inline 水平,与红色方格(inline-block) 同级,遵循后来居上(接下来会解释)原则,没有被 inline-block 元素覆盖。
元素层叠水平相当
那么当两个元素层叠水平相同的时候,这时候就要遵循下面两个准则:
-
后来居上原则
-
谁 z-index 大,谁在上的准则
后来居上的原则:
后来居上准则就是说,当元素层叠水平相同的时候后面的 DOM 会覆盖前面的 DOM 元素。这个很好理解,不过多解释了。这也就是我们经常会看到为什么后面的元素会覆盖前面的元素。