概念
HTML在布局的时候,其实不完全是二维空间,还有一条Z轴,可以理解为Z轴的布局空间。
{% asset_img z-index.jpg %}
- 层叠上下文:和BFC类似,对于嵌套的元素来讲,如果某一元素具有了层叠上下文,即代表着他的子元素受这一上下文约束。
- 层叠水平:同一个层叠上下文中元素在z轴上的显示顺序,好比封建社会把人分为三六九等类似,所以所有的元素都有层叠水平。
- 层叠顺序:表示元素发生层叠时候有着特定的垂直显示顺序(可结合层叠上下文和层叠水平判断)。
注:层叠上下文和层叠水平是概念,而层叠顺序是依据层叠上下文和层叠水平进行z轴优先级的判断规则。
z-index相关
作用:
- 生成层叠上下文
- 改变同一层叠上下文里的元素的层叠顺序
特性
- 只适用于定位元素(即position属性值是非static的元素)
- 如果z-index不设置则默认值为auto,此时不会创建层叠上下文,但是如果设置为0,那将会创建层叠上下文
层叠准则
下面是摘抄自css手册中的说明:
- z-index用于确定元素在当前层叠上下文中的层叠级别,并确定该元素是否创建新的局部层叠上下文。
- 每个元素层叠顺序由所属的层叠上下文和元素本身的层叠级别决定(每个元素仅属于一个层叠上下文)。
- 同一个层叠上下文中,层叠级别大的显示在上面,反之显示在下面。
- 同一个层叠上下文中,层叠级别相同的两个元素,依据它们在HTML文档流中的顺序,写在后面的将会覆盖前面的。
- 不同层叠上下文中,元素的显示顺序依据祖先的层叠级别来决定,与自身的层叠级别无关。
- 当z-index未定义或者值为auto时,在IE6,7下会创建新的局部层叠上下文,而在高级浏览器中,按照规范不产生新的局部层叠上下文
依据以上准则,基本就可以判断两个元素之间的z轴方向显示优先级的问题
其他
除了z-index属性能显示控制层叠顺序以外,元素类型不同那么默认层叠顺序也不一样:

但是上面这张图,想了半天也不知道怎么去验证...