专栏名称: Lindz
前端工程师
目录
相关文章推荐
前端大全  ·  Cursor 内部工作原理 ·  2 天前  
龙视新闻联播  ·  清凉在龙江丨四季皆可游 昼夜都精彩 ·  昨天  
龙视新闻联播  ·  清凉在龙江丨四季皆可游 昼夜都精彩 ·  昨天  
前端早读课  ·  【第3531期】了解声明式 Web推送 ·  2 天前  
前端大全  ·  前端行情变了,差别真的挺大。。。 ·  2 天前  
51好读  ›  专栏  ›  Lindz

深入理解 CSS 属性 z-index

Lindz  · 掘金  · 前端  · 2018-02-24 11:22

正文

请到「今天看啥」查看全文


当你为 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 元素覆盖。

元素层叠水平相当

那么当两个元素层叠水平相同的时候,这时候就要遵循下面两个准则:

  1. 后来居上原则
  2. 谁 z-index 大,谁在上的准则

后来居上的原则:

后来居上准则就是说,当元素层叠水平相同的时候后面的 DOM 会覆盖前面的 DOM 元素。这个很好理解,不过多解释了。这也就是我们经常会看到为什么后面的元素会覆盖前面的元素。







请到「今天看啥」查看全文