还没有。构建完渲染树,只能说明浏览器已经确定了“哪些节点要显示,以及它们的样式是什么”,但页面像素还没有真正绘制到屏幕上。
典型流程是:
HTML
↓
DOM 树
+
CSS
↓
CSSOM 树
↓
渲染树 Render Tree
↓
布局 Layout
↓
绘制 Paint
↓
合成 Composite
↓
显示到屏幕
渲染树主要由 DOM 树和 CSSOM 树合并而成,并且只包含页面中需要渲染的可见节点【W2】。例如:
<div style="display: none">不会进入渲染树</div>
<p>会进入渲染树</p>
构建完渲染树之后,浏览器还要继续做几件事:
- 布局 Layout:计算每个元素的具体位置和尺寸;
- 分层 Layering:根据
z-index、transform等情况生成图层树; - 绘制 Paint:把文字、颜色、边框、阴影等转换成绘制指令;
- 合成 Composite:把不同图层合成为最终图像;
- 提交显示:将结果交给显示系统呈现。
所以可以这样理解:
- DOM 树:页面有哪些节点;
- CSSOM 树:这些节点应该怎么呈现;
- 渲染树:哪些节点最终需要呈现,以及应用了什么样式;
- 布局:它们具体放在哪里、占多大空间;
- 绘制:应该画出什么;
- 合成:如何把各个图层叠加成最终页面。
我的笔记里也强调过,浏览器还需要从布局树继续生成图层,并通过各个图层的叠加形成最终页面【4】。因此,渲染树构建完成不是“页面已经显示”,而是“页面具备了继续布局和绘制的输入”。