一句话:回流必将引起重绘,重绘不一定会引起回流。
回流就是计算所有元素在窗口的位置,重绘就是计算所有元素在窗口具体呈现的内容
**

1.回流(重排)

当操作DOM的变化影响了元素的几何信息(元素的的位置和尺寸大小(宽高)),浏览器需要重新计算元素的几何属性,重新布局在界面中的正确位置
简单的说就是重新生成布局,重新排列元素。
会导致回流的操作:

  • 页面首次渲染
  • 浏览器窗口大小发生改变
  • 元素尺寸或位置发生改变
  • 元素内容变化(文字数量或图片大小等等)
  • 元素字体大小变化
  • 添加或者删除可见DOM元素
  • 激活CSS伪类(例如::hover
  • 查询某些属性或调用某些方法

2.重绘

普通装修,颜色之类的
当页面中元素样式的改变并不影响它在文档流中的位置时(例如:colorbackground-colorvisibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。

3.性能影响

有时即使仅仅回流一个单一的元素,它的父元素以及任何跟随它的元素也会产生回流。
回流比重绘的代价要更高
重排属性:height、line-height、font-size、border
重绘属性:height、line-height、font-size 、border、background-color、visibility