回流与重绘

news/2024/12/29 1:51:24/

触发回流与重绘条件👉

回流

当渲染树中部分或者全部元素的尺寸、结构或者属性发生变化时,浏览器会重新渲染部分或者全部文档的过程就称为 回流。

引起回流原因

1.页面的首次渲染

2.浏览器的窗口大小发生变化

3.元素的内容发生变化

4.元素的尺寸或者位置发生变化

5.元素的字体大小发生变化

6.激活CSS伪类

7.查询某些属性或者调用某些方法

8.添加或者删除可见的DOM元素

在触发回流(重排)的时候,由于浏览器染页面是基于流式布局的,所以当触发回流时,会导致周围的DOM元素重新排列,它的影响范围有两种:

-全局范围:从根节点开始,对整个渲染树进行重新布局

-局部范围:对渲染树的某部分或者一个渲染对象进行重新布局

重绘

当页面中某些元素的样式发生变化,但是不会影响其在文档流中的位置时,浏览器就会对元素进行重新绘制,这个过程就是 重绘。

引起重绘原因

color、background 相关属性: background-color、background-image等

outline 相关属性: outline-color、 outline-width 、 text-decoration。

border-radius、visibility、 box-shadow

注意: 当触发回流时,一定会触发重绘,但是重绘不一定会引发回流。

如何避免回流和重绘

减少回流与重绘的措施:

1.操作DOM时,尽量在低层级的DOM节点进行操作

2.不要使用 table 布局,一个小的改动可能会使整个 table 进行重新布局

3.使用CSS的表达式

4.不要频繁操作元素的样式,对于静态页面,可以修改类名,而不是样式

5.使用absolute或者fixed,使元素脱离文档流,这样他们发生变化就不会影响其他元素

6.避免频繁操作DOM,可以创建一个文档片段 documentFragment ,在它上面应用所有DOM操作,最后再把它添加到文档中

7.将元素先设置 display: none ,:操作结束后再把它显示出来。因为在display属性为none的元素上进行的DOM操作不会引发回流和重绘

8.将DOM的多个读操作(或者写操作)放在一起,而不是读写操作穿插着写。这得益于浏览器的渲染队列机制。

浏览器针对页面的回流与重绘,进行了自身的优化-- 渲染队列

浏览器会将所有的回流、重绘的操作放在一个队列中,当队列中的操作到了一定的数量或者到了一定的时间间隔浏览器就会对队列进行批处理。这样就会让多次的回流、重绘变成一次回流重绘。


http://www.ppmy.cn/news/24330.html

相关文章

Linux系统之部署企业内部静态导航页

Linux系统之部署企业内部静态导航页 一、本次实践目的二、检查本地系统环境1.检查系统版本2.检查内核版本三、下载静态导航页资源包1.创建下载目录2.下载资源包四、安装apache服务1.安装httpd2.复制网页文件3.重启httpd服务4.检查httpd服务状态五、访问导航页六、修改导航页网站…

53. 最大子数组和

文章目录题目描述暴力法动态规划法分治法参考文献题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入&…

[python刷题模板] 前缀函数/next数组/kmp算法

[python刷题模板] 前缀函数/next数组/kmp算法 一、 算法&数据结构1. 描述2. 复杂度分析3. 常见应用4. 常用优化二、 模板代码1. 裸前缀函数2. 树上kmp3. 裸kmp三、其他四、更多例题五、参考链接一、 算法&数据结构 1. 描述 前缀函数和next数组基本上是一个东西&#…

JavaScript------数组

目录 一、简介 1、什么是数组? 2、创建数组 3、数组的数据类型 4、向数组中添加元素 5、读取数组中的元素 6、实例属性:length 二、遍历数组 方式一:for循环 方式二:for...of 三、数组方法(常用&#xff09…

嵌软工程师要掌握的硬件知识2:一文看懂什么是开漏和推挽电路(open-drain / push-pull)

想了解开漏和推挽,就要先了解一下三极管和场效应管是什么,在其他章节有详细介绍,本文就不再进行赘述。 1 推挽(push pull)电路 1.1 理解什么是推挽电路 - 详细介绍 如图所示,Q3是个NPN型三极管,Q4是个PNP型三极管。 1)当Vin电压为正时,上面的N型三极管控制端有电…

进程间通信(上)

进程间通信(上)背景进程间通信目的进程间通信发展进程间通信分类管道什么是管道匿名管道实例代码简单的匿名管道实现一个父进程控制单个子进程完成指定任务父进程控制一批子进程完成任务(进程池)用fork来共享管道站在文件描述符角…

WebRTC(一):三种架构和基本原理

文章目录一、三种架构二、为什么SFU最为常用?一、三种架构 webrtc大致可以分为三种架构: MESH mesh架构需要所有参与连接的peer简历和所有其他peer的媒体的连接,如图一。 该架构需要n-1个上下行,以此带来的带宽消耗&#xff08…

一个按键多级菜单的设计方法

# define MENU_LEN_MENU 55   / / 定义菜单总长度 typedef struct {  uchar  KeyStateIndex ;    / / 当前状态索引号  uchar  KeyDnState ;    / / 按下“向下”键时转向的状态索引号  uchar  KeyUpState ;    …