[译] CSS2.1规范z-index部分

1,072 阅读4分钟

前言

        出于为了更好的理解CSS层叠上下文的相关概念,我把CSS规范的z-index部分进行了翻译。由于英文水平有限,如有翻译不妥之处,还请斧正。原文地址

译文

9.9.1 指定层叠水平:“z-index”属性

    Value:  auto | <integer> | inherit
    Initial:  auto
    Applies to:  positioned elements
    Inherited:  no
    Percentages:  N/A
    Media:  visual
    Computed value:  as specified

对于定位元素,z-index属性意义:

  • 指定在当前层叠上下文中,盒模型元素的层叠水平。
  • 这个盒模型元素是否要创建层叠上下文。

取值含义:

  • 整数:在当前层叠上下文中,指定盒模型元素的层叠水平为该数值。同时盒模型元素还会创建一个新的层叠上下文。
  • auto:在当前层叠上下文中,指定盒模型元素的层叠水平为0。除非盒模型元素是根元素,否则它不会建立新的层叠上下文。

在下面描述中,“从后到前”的含义:当用户面对屏幕时,越前面的离用户更近,越后面的有可能被前面的挡住。

        在CSS2.1规范中,每个盒模型元素在三维空间中都有一个位置。除了水平和垂直位置之外,这些盒模型元素还会沿着“z轴”进行放置,并在一个盒模型元素上对另一个盒模型元素进行格式化。当盒模型元素之间在视觉上重叠时,z轴位置就特别重要。本节将讨论如何沿着z轴放置这些盒模型元素。

        渲染树绘制到画布上的顺序,是根据在层叠上下文中的位置来决定的。层叠上下文本身是可以包含其他层叠上下文的。从父层叠上下文的角度看,一个层叠上下文又是原子性的。也就是说,同一个层叠上下文,不可能同时存在多个父层叠上下文。

        每个盒模型元素都属于一个层叠上下文。在给定的层叠上下文中,每个定位的盒模型元素都有一个整数的层叠水平,这是它在z轴上的位置,相对于相同层叠上下文中的其他层叠水平。具有较大层叠水平的盒模型元素,会比较低层叠水平的盒模型元素先进行格式化。盒模型元素也可以有负的层叠水平。在层叠上下文中,具有相同堆叠层级的盒模型元素,会依照文档树中的后来者居上的原则,进行从后到前堆叠。

        根元素构成了根层叠上下文,而其他层叠上下文,则由拥有zIndex(值不为auto)、且定位的盒模型元素构成。层叠上下文不一定与包含块相关。在未来的CSS级别中,其他属性可能会引入叠加上下文,例如“透明度”。

在每个层叠上下文中,以下各层会按照从后到前进行绘制:

  1. 构成层叠上下文元素的背景和边框
  2. 具有负层叠水平的子层叠上下文(值最小的放越后面)
  3. 没有脱离文档流、且非定位的后代非内联盒模型元素
  4. 非定位的浮动盒模型元素
  5. 没有脱离文档流、且非定位的后代内联盒模型元素,包括内联table和内联block
  6. 层叠水平为0的子层叠上下文、层叠水平为0的定位子层叠上下文
  7. 具有正层叠水平的子层叠上下文(值最大的放越前面)

        这个绘制顺序会递归地应用于每个层叠上下文中。这一层叠上下文绘画顺序的描述构成了附录E中详细规范定义的概述。