第六章 CSS解释器和样式布局

从整个网页的加载和渲染过程来看,CSS解释器和规则匹配处于DOM树建立之后,RenderObject树建立之前,CSS解释器解释后的结果会保存起来,然后RenderObject树基于该结果来进行规范匹配和布局计算。当网页有用户交互或者动画等动作的时候,通过CSSDOM等技术,JavaScript代码同样可以非常方便的修改CSS代码,WebKit此时需要重新解释样式并重复以上这一过程。

1. 样式来源

  • 网页开发者编写的样式信息;
  • 网页的读者设置的样式信息,读者可以设置一个样式,这个样式可以应用到其浏览器的网页;
  • 浏览器的内在默认样式。

2. CSS中主要的选择器

  • 标签选择器
  • 类型选择器
  • ID选择器
  • 属性选择器
  • 后代选择器
  • 子女选择器
  • 相邻同胞选择器

一般而言选择器描述的越具体,它的优先级越高,也就是说选择器指向的越准确,它的优先级越高。例如:如果用1表示标签选择器的优先级,那么类选择器的优先级就是10,ID选择器就是100,数值越大表示优先级越高。

3. 框模型

框模型(Box model,或称为盒子模型)是CSS标准中引入来表示HTML标签元素的布局结构。一个框模型大致包括四个部分,它们从外到内分别是外边距(Margin)、边框(Border)、内边距(Padding)和内容(Content)。

CSS标准的框模型结构

框模型是布局计算的基础,渲染引擎可以根据模型来理解如何排版元素以及元素间的位置关系。

4. 包含块(Containing Block)模型

当WebKit计算元素的盒子的位置和大小时,WebKit需要计算该元素和另外一个矩形区域的相对位置,这个矩形区域称为该元素的包含块。

  • 根元素的包含块称为初始包含块,通常它的大小就是可视区域(Viewport)的大小。
  • 对于其他位置属性设置为“static”或者“relative”的元素,它的包含块就是最近祖先的盒子模型中的内容区域(Content)。
  • 如果元素的位置属性为“fixed”,那么该元素的包含块脱离HTML文档,固定在可视区域的某个特定位置。
  • 如果元素的位置属性为“absolute”,那么该元素的包含块由最近的含有属性“absolute”、“relative”或者“fixed”的祖先决定。

5. CSSOM(CSS Object Module)

CSSOM称为CSS对象模型,它的思想是在DOM中的一些节点接口中,加入获取和操作CSS属性或者接口的JavaScript接口,因而JavaScript可以动态操作CSS样式。

6. WebKit布局

6.1 基础

当WebKit创建RenderObject对象之后,每个对象都不知道自己的位置、大小等信息的,WebKit根据模型来计算它们的位置、大小等信息的过程称为布局计算(或者称为排版)。

Frame类用于描述网页的框结构,每个框都有一个FrameView类,用于表示框的视图结构。FrameView类主要负责视图方面的任务,例如网页的视图大小、滚动、布局计算、绘图等,它是一个总入口类。

布局计算中的webkit类

布局计算中根据计算范围大致可分为两类:第一类是对整个RenderObject树进行的计算;第二类是对RenderObject树中的某个子树进行计算,常见于文本元素或者overflow:auto块的计算,这种情况一般是其子树布局的改变不会影响其周围元素的布局,因而不需要重新计算更大范围内的布局。

6.2 布局计算

布局计算是一个递归的过程,这是因为一个节点的大小通常需要先计算它的子女节点的位置、大小等信息。

哪些情况下需要重新计算布局呢?总体来讲,只要样式发生变化WebKit都需要重新计算,但实际场景中,有以下一些情况:

  1. 当网页首次被打开的时候,浏览器设置网页的可视区域(viewport),并调用计算布局的方法。
  2. 网页动画会触发布局计算。
  3. JavaScript代码通过CSSOM等直接修改样式信息,它们也会触发WebKit重新计算布局。
  4. 用户的交互也会触发布局计算,例如:翻滚网页。

布局计算相对是比较耗时间的,更糟糕的是,一旦布局发生变化,WebKit就需要后面的重新绘制操作。另一方面,减少样式的变动而依赖现在HTML5的新功能可以有效地提高网页的渲染效率。

6.4 布局测试

布局测试不仅测试布局,还包括渲染等综合渲染结果。

基本测试工作方式是:预先准备大量用于单元测试的网页和期望的渲染结果,然后用webkit编译出来的DumpRenderTree来测试网页,把得到的结果和期望的结果进行对比,以检查渲染的正确性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,074评论 1 92
  • 前端必读:浏览器内部工作原理[https://kb.cnblogs.com/page/129756/] 作者: T...
    我是强强阅读 1,244评论 0 2
  • 1. 介绍 浏览器可能是最广泛使用的软件。本书将介绍浏览器的工作原理。我们将看到,当你在地址栏中输入google....
    康斌阅读 2,158评论 7 18
  • 简介浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.c...
    听风阁阅读 3,386评论 0 7
  • 本来心情莫名烦躁,但是画着画着,心就静下来了,沉静在这黑白的世界之中。 随手写文字时竟鬼使神差得写成了3月,我确实...
    行动就是生产力阅读 462评论 2 3

友情链接更多精彩内容