# z-index
理解
html中页面元素可以并列,也可以层叠。z-index
是用来控制元素重叠时堆叠顺序的属性。z-index
属性适用于已经定位的元素(即position
不为static
的元素)
- 堆叠上下文
即stacking content
,在一个页面中可能有多个堆叠上下文,每个页面上的元素都只属于一个堆叠上下文,元素的z-index
属性也只描述同一个堆叠上下文中"z轴"的层级表示,不同堆叠上下文的元素无法通过z-index
来控制元素的层叠
z-index
的取值
z-index
的默认值是auto
,当页面生成一个新的元素时,如果不显式地设置它的z-index
值,它就不会自己产生一个新的stacking content
,而是处于和父元素相同的stacking content
中。z-index
的值可以为inherit
,表示继承父级的属性。z-index
的值也可以设置为整数值,甚至可以设置为负值,当元素的z-index
值设置为整数时(包括0),它就会产生一个自己的stacking content
,它的父元素的z-index
值就不会和它的z-index
值做比较。
- 不使用
z-index
的情况
页面元素在页面中的布局是流式的,即从上到下,从左到右排布,而堆叠顺序是从下到上的,也就是说一个元素A先于另一个元素B出现,那么A就是处于B之下的(如果两者有重叠的部分,A就会被B覆盖)。
另一个关注点是非定位元素(即不显式地设置position
的元素)总是先于定位元素(显式地设置position
的元素)渲染的,所以它始终是在定位元素之下的,与在HTML中出现的顺序无关。
比如最后一个normal
元素出现在position
为absolute
和relative
的后面,却被它们遮盖。
浮动堆叠顺序 浮动元素的层叠位置介于非定位元素与定位元素之间
z-index
的堆叠 如果一个元素未设置position
,那么即使设置了z-index
的值,也无法提高它的层级。子元素的
z-index
值只在父元素范围内有效。子堆叠上下文被看做是父堆叠上下文中一个独立的模块,相邻的堆叠上下文完全没关系。
总结:
z-index
的默认值是auto
,表示和父元素在相同等堆叠上下文中。- 只有设置了
position
为absolute
或者relative
,才可以通过z-index
提高层级。 - 非定位元素(即不显式地设置
position
的元素)总是在定位元素(显式地设置position
的元素)之下。 - 浮动元素的层叠位置介于非定位元素与定位元素之间