css z-index

220 阅读2分钟

概念

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属性能显示控制层叠顺序以外,元素类型不同那么默认层叠顺序也不一样:

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