css|回流和重绘🎈涉及的知识你晓得多少

180 阅读1分钟

1、回流概念

当对DOM的修改引起DOM位置和几何尺寸发生变化,会发生回流

2、触发条件

  • 添加或删除可见的DOM元素(display:none)
  • 元素的位置发生变化(left、top.....)
  • 元素的尺寸发生变化(width、height、padding、margin、border)
  • 内容发生变化,比如文本变化或图片被另一个不同尺寸的图片所替代
  • 页面一开始渲染的时候(这避免不了)
  • 浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的
  • offsetTop、offsetLeft、 offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、clientTop、clientLeft、clientWidth、clientHeight

3、重绘概念

当对DOM的修改只是影响了样式,不影响几何属性时,会发生重绘(颜色, 背景色)

4、触发重绘的操作

  • 背景色
  • 文字色
  • visibility:hidden(因为不改变DOM的位置和存在性,只是针对可见性)
  • 文本方向的修改
  • 阴影的修改

4、避免回流重绘的操作

  1. 将多次计算操作缓存起来,做一次操作
  2. 避免逐条改变样式,使用类别一次性操作
  3. 先设置成display:none;在设置完所有样式后,在设置display:block;

5、flush队列

现在的浏览器很聪明,对它来说每次操作DOM都发生回流或者重绘是不太可能的,所以他自己缓存了一个flush队列,当有回流或者重绘的时候,就放到队列中,当队列的任务多起来。或者到达一定的时候间隔,或者不得已的时候,就会将这些任务一口气出队。

参考👀

blog.csdn.net/fujiaxu666/…