本章定义了 CSS 2.2 中绘制顺序的详细内容,超出了规范其余部分的描述。
堆栈底部离用户最远,堆栈顶部离用户最近:
| | | | | | | | ⇦ ☻ | | | 用户 z-index: 画布 -1 0 1 2
堆叠上下文背景和负 z-index 的堆叠上下文位于堆栈底部,而正 z-index 的堆叠上下文位于堆栈顶部。
如果画布包含在另一个画布中,则画布是透明的;如果没有,则由 UA 定义颜色。画布的范围是无限的,并包含根元素。最初,视口的左上角锚定在画布原点。
为生成堆叠上下文的元素的后代设置的绘制顺序(参见'z-index'属性)为:
如果该元素是根元素:
如果该元素是块级、列表项或其他块级等价物:
否则,如果该元素是块级表格:
由定位后代形成的堆叠上下文,具有负 z-index(不包括 0),按 z-index 顺序(从最负开始)然后按树顺序排列。
对于所有其流内、非定位的块级后代,按树顺序:如果该元素是块级、列表项或其他块级等价物:
否则,该元素是一个表格:
所有非定位的浮动后代,按树顺序排列。对于其中的每一个,将元素视为创建了一个新的堆叠上下文,但任何定位的后代和实际创建新堆叠上下文的后代应视为父堆叠上下文的一部分,而不是这个新的堆叠上下文的一部分。
如果该元素是生成堆叠上下文的内联元素,则:
对于该元素所在的每个行框:
否则:首先是元素,然后是所有其流内、非定位的块级后代,按树顺序排列:
如果该元素是块级替换元素,则:原子地替换内容。
否则,对于该元素的每个行框:
对于该元素的子级,在该行框中,按树顺序排列的每个框:
元素的背景色。
元素的背景图像。
元素的边框。
对于内联元素:
对于该行框中的所有元素的流内、非定位的内联级子级,以及该行框中元素内的所有文本行,按树顺序排列:
如果这是一个文本行,则:
否则,跳转到7.2.1,以获取该元素。
对于内联块和内联表格元素:
对于内联级替换元素:
某些框可能是通过行分割或 Unicode 双向算法生成的。
可选地,元素的轮廓(参见下方的 10)。
可选地,如果该元素是块级,则元素的轮廓(参见下方的 10)。
按树顺序排列所有具有 'z-index: auto' 或 'z-index: 0' 的定位后代。对于具有 'z-index: auto' 的元素,将元素视为创建了一个新的堆叠上下文,但任何定位的后代和实际创建新堆叠上下文的后代应视为父堆叠上下文的一部分,而不是这个新的堆叠上下文的一部分。对于具有 'z-index: 0' 的元素,原子地处理生成的堆叠上下文。
按 z-index 顺序排列由定位后代形成的堆叠上下文,z-index 大于或等于 1 的按树顺序排列(从最小开始)。
最后,在上述步骤中未绘制轮廓的实现必须在此阶段从该堆叠上下文中绘制轮廓。(建议在此步骤中绘制轮廓,而不是在上述步骤中绘制。)
根元素的背景只绘制一次,覆盖整个画布。
虽然双向内联元素的背景按树顺序绘制,但它们的位置是按视觉顺序排列的。由于 CSS 2.2 中未指定内联背景的位置,因此这两个要求的确切结果由 UA 定义。CSS3 可能会对此进行更详细的定义。