一句话:回流必将引起重绘,重绘不一定会引起回流。
回流就是计算所有元素在窗口的位置,重绘就是计算所有元素在窗口具体呈现的内容
**
1.回流(重排)
当操作DOM的变化影响了元素的几何信息(元素的的位置和尺寸大小(宽高)),浏览器需要重新计算元素的几何属性,重新布局在界面中的正确位置
简单的说就是重新生成布局,重新排列元素。
会导致回流的操作:
- 页面首次渲染
- 浏览器窗口大小发生改变
- 元素尺寸或位置发生改变
- 元素内容变化(文字数量或图片大小等等)
- 元素字体大小变化
- 添加或者删除可见的
DOM
元素 - 激活
CSS
伪类(例如::hover
) - 查询某些属性或调用某些方法
2.重绘
普通装修,颜色之类的
当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color
、background-color
、visibility
等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。
3.性能影响
有时即使仅仅回流一个单一的元素,它的父元素以及任何跟随它的元素也会产生回流。
回流比重绘的代价要更高
重排属性:height、line-height、font-size、border
重绘属性:height、line-height、font-size 、border、background-color、visibility