回流和重绘

一、HTML怎么加载

        在页面加载时,浏览器把获取到的HTML代码解析成1个DOM树,DOM树里包含了所有HTML

标签,包括display:none隐藏,还有用JS动态添加的元素等。

浏览器把所有样式(用户定义的CSS和用户代理)解析成样式结构体。

        DOM Tree 和样式结构体组合后构建render tree, render tree类似于DOM tree,但区别很

大,因为render tree能识别样式,render tree中每个NODE都有自己的style,而且render tree不

包含隐藏的节点(比如display:none的节点,还有head节点),因为这些节点不会用于呈现,而且

不会影响呈现的,所以就不会包含到 render tree中。简单说就是DOM Tree和我们写的CSS结合

在一起之后,渲染出了render tree。

二、回流

        回流(reflow):当render tree中的元素的宽高、布局、显示、隐藏或元素内部文字结结构

发生改变时,会影响自身及其父元素、甚至追溯到更多的祖先元素发生改变,则会导致元素内部、

周围甚至整个页面的重新渲染,页面发生重构,回流就产生了。

三、重绘

        重绘(repaint):元素的结构(宽高、布局、显示隐藏、内部文字大小)未发生改变,只是

元素的外观样式发生改变,比如背景颜色、内部文字颜色、边框颜色等。此时会引起浏览器重绘,

显然重绘的速度快于回流。

四、区别

        回流必将引起重绘,而重绘不一定会引起回流。例如:只有颜色改变的时候就只会发生重绘

而不会引起回流。

        当页面布局和几何属性改变时就需要回流。例如:添加或者删除可见的DOM元素,元素位置

改变,元素尺寸改变——边距、填充、边框、宽度和高度,内容改变。

        每个页面至少需要一次回流,就是在页面第一次加载的时候,这时就是回流,因为要构建

render tree。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染

树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,这就是重绘。

你可能感兴趣的:(css3)