前端面试题HTML+CSS基础篇——回流和重绘

885 阅读1分钟

前端的回流和重绘

1. 回流

回流又称之为重排,当Render Tree中的一部分(或者全部)因元素的规模,尺寸,布局等改变,而需要重新构建页面,就会触发回流

具体总结为:

  • 页面初始渲染
  • 添加、删除可见的DOM元素
  • 改变元素位置,尺寸,内容
触发回流的属性:
  • 盒子模型相关属性:width、height、display、border、border-width…
  • 定位及浮动:position、left、right、top、bottom、float、padding、margin…
  • 文字相关:text-align、overflow、font-weight、font-family、line-height,vertical-align、font-size、white-space…

2. 重绘

当Render Tree中的一些元素需要更新属性,而这些属性只是影响到元素的外观,风格而不影响布局,就会触发重绘

触发重绘的属性:

color、border-style、border-radius、outline、visibility、background-color、text-decoration、background、background-image、box-shadow…

回流一定重绘,但是重绘不一定回流

3.如何减少回流和重绘

  • 用translate代替top
  • 用opacity代替visibility
  • 预先定义好className,然后统一修改Dom的className
  • 不要把Dom结点的属性值放在一个循环里面变成循环变量
  • 让要操作的元素进行“离线处理”,处理完后一起更新