z-index 是CSS的属性,用于定义一个元素在屏幕Z轴上的层叠顺序。仅在定位元素(非static)上有效。
但是一个元素的层叠顺序不仅仅是由z-index的数值决定,还由层叠上下文层叠等级共同决定。

层叠上下文: 可以理解为比普通元素在Z轴上更高一层的元素。
层叠等级:

  • 在普通元素中,表示在Z轴上的上下顺序
  • 同一个层叠上下文中,表示该层叠上下文中的层叠上下文元素在Z轴上的上下顺序。
    第二点是不是有点绕,那来看看一个例子:

A班有班长A1,副班长A2。(同一层叠上下文)
B班有班长B2,副班长B2。(同一层叠上下文)
在A班中,A1职位是大于A2的(同理B班),A2和B2虽然都是副班长,但不在一个班就没有比较的意义。

所以在不同层叠上下文中比较层叠等级是没有意义的。

层叠顺序:是指在不考虑CSS3的情况下,元素层叠的规则。 z-index层叠顺序

比较规则

  • 如果不在同一层叠上下文,先比较他们所在的层叠上下文的层叠顺序
  • 如果在同一层叠上下文,z-index的等级越大的在最上面
  • 如果在同一层的上下午,z-index的等级相同,在DOM结构中后面的元素会覆盖之前的元素

如何产生层叠上下文

  • HTML根元素就是一个根层叠上下文
  • 普通元素设置position(非static)并设置z-index,会产生层叠上下文

每一次改变z-index都会引起重绘和回流,所以还是尽量少用比较好。