网页渲染显示过程:
- 解析 Html ,生成 DOM 树(包含display:none)
- 以 DOM 树为基础,根据节点的集合属性(解析 CSS)生成 render 树
- 在 render 树基础上再渲染颜色、背景等属性及其进行布局
- 绘制显示
CSS 控制元素隐藏
- display:none 不占原来位置
- valibility:hidden 占原来位置
回流(reflow):render 树部分或者全部因大小或边距发生改变需要重新构建的过程
重绘(repaint):颜色、背景色变化但布局不会变化而重新渲染的过程
总结:重绘只涉及样式改变而不涉及布局改变;回流一定伴随着重绘,重绘可以单独出现
引起回流原因:
- 页面初始化渲染
- DOM 元素发生改变
- render 树改变
- 窗口 resize 事件
- 字体大小改变
- 特殊:设计内容区域(宽高边距等)属性
减少回流方法
- 避免逐项更改样式
- 避免循环操作 DOM
- 复杂元素绝对定位或固定定位,脱离文档流
避免多次读取涉及宽度的属性