当 DOM 的变化影响了元素的几何属性(宽和高)———— 比如改变了边框宽度,或给段落增加文字导致行数增加。此时浏览器就需要重新计算元素的几何属性,可能页面上其他元素的几何属性也会受到影响。此时浏览器中的一部分渲染树就失效了,就需要重新构造这部分渲染树,这个过程叫做「重排」。
完成重排后,浏览器会重新绘制受到影响的部分到屏幕中,该过程称作「重绘」。
并不是所有的 DOM 变化都会影响元素的几何属性,比如变化 background 就不会。
最后举几个重排的例子:
- 添加或删除可见的元素
- 元素位置改变
- 元素尺寸改变(包括 margin、padding、content、width、height 的改变)
- 内容改变,比如文本改变或者图片被另一个不同尺寸的图片替代
- 浏览器窗口尺寸变化
另外,像一些需要获取元素布局的 API ,为了保证获取到最新的信息,也会强制触发重排,比如:offsetTop、offsetLeft、offersetWidth、offersetHeight.... 等等。