浏览器是如何解析和渲染 CSS 的?

161 阅读1分钟

浏览器解析和渲染 CSS 的步骤:

§ 解析

将 CSS 字符串转换为包括选择器、属性名、属性值的数据结构,长度单位被转换为像素,关键字被转换为具体值,需要计算的函数转为具体值

§ 级联

相同元素相同属性的最终值基本由书写顺序,按先后决定,此外:

  • !important > 其它
  • style属性 > 其它
  • 选择器优先级 ID > 类 > 类型(标签) > 相邻 > 子代 > 后代 > 通配符 > 属性 > 伪类
  • 开发者 > 用户配置 > 浏览器默认属性
  • 层叠

根据position不为static等属性或弹性布局中的子元素等情况创建层叠上下文。根据z-index决定层的叠加顺序

§ Render Tree

深度优先遍历之前解析 HTML 得到的 Dom Tree,匹配解析 CSS 得到的 CSSOM

计算元素的位置、宽高,将可见元素的内容和样式放入 Render Tree

§ 布局

分层按照流式布局(块、内联、定位、浮动)、弹性布局、网格布局或表格布局等布置元素,按照尽可能多地展示内容的原则,处理溢出

§ 绘制

分层绘制颜色、边框、背景、阴影

§ 合成

将不同图层分格渲染出位图,可交由 GPU 线程处理

处理图层的透明度opactiy,和变形transform等

将所有图层合到一起

§ 重新渲染

JS 更改 CSS 属性,CSS 动画以及伪类(如hover),内容变更等,可能会引起浏览器重新布局、绘制或者合成