z-index仅在定位元素上有效,定义了postion,且值不为static,默认值auto。auto表示元素在当前层叠上下文中的层叠级别是0,
元素在Z轴上的堆叠顺序,由元素的层叠上下文、层叠等级共同决定。
层叠等级
- 同一个层叠上下文中,该层叠上下文中的层叠上下文元素在Z轴上的上下顺序。
 - 普通元素中,普通元素在Z轴上的上下顺序。
 
产生“层叠上下文”
- HTML中的根元素本身具有层叠上下文,“根层叠上下文”。
 - 普通元素设置position属性值为非static,设置z-index为集体数值,产生层叠上下文。
 - CSS3中的新属性也可产生层叠上下文。
 
不考虑CSS3时,层叠顺序规则:
- 层叠上下文元素的背景和边框 background/border
 - z-index < 0
 - block 块级水平盒子
 - float 浮动盒子
 - inline/inline-block 水平盒子
 - z-index:auto / z-index: 0,不依赖z-index的层叠上下文
 - z-index > 0
 
结论:
- 比较两个元素是否处于一个层叠上下文中。是:层叠等级大的在上。否:比较它们所处的层叠上下文的层叠等级。
 - 两个元素层叠等级相同、层叠顺序相同,在DOM结构中后面的元素覆盖前面的元素。
 
CSS3产生层叠上下文
- 父元素的display属性值为flex|inline-flex,子元素z-index值不为auto,子元素为层叠上下级元素。
 - 元素的opacity值不是1。
 - 元素的transform属性值不是none
 - 元素的mix-blend-mode属性值不是normal,元素内容和元素的背景以及下面的元素发生混合
 - 元素的filter属性值不是none
 - 元素的isolation属性值是isolate,该属于用于隔离mix-blend-mode元素的混合。
 - will-change指定的属性值为上面任意一个,该属性用于提高页面滚动、动画等渲染性能
 - 元素的-webkit-overflow-scrolling属性值设置为touch