CSS的重绘和重排是什么?

ops/2024/10/11 9:26:37/

你好同学,我是沐爸,欢迎点赞、收藏和关注。个人知乎

在CSS中,元素的某些属性的变化会触发浏览器的重绘(Repaint)或重排(Reflow,也称为重渲染或回流)。了解这些差异可以帮助开发同学优化页面性能,避免不必要的性能开销。

一、重排(Reflow)

重排,简单理解就是重新排列。重排是浏览器中最昂贵的操作之一,因为它涉及到重新计算页面上所有受影响的元素的位置和几何尺寸。以下CSS属性的改变通常会触发重排:

1.布局相关属性

widthheightpaddingmarginborderdisplay(当值从none变为其他时)、positiontoprightbottomleftfloatclearoverflow(当值从visible变为hiddenscrollauto时,且内容溢出时)等。

2.内容相关属性

虽然内容(如文本或图片)的更改通常不会导致重排,但如果内容增加导致元素尺寸改变,或者元素的可见性改变(如display: none变为display: block),则可能触发重排。

3.添加或删除DOM元素
这通常会导致相关元素的重排。

二、重绘(Repaint)

重绘,简单理解就是重新绘制。比重排开销小,它只涉及到改变元素的外观,而不改变其在文档流中的位置或几何尺寸。以下CSS属性的改变通常只触发重绘:

视觉相关属性

colorbackgroundborder-style(不影响尺寸)、visibility(当元素从visible变为hidden时,不涉及位置变化)、text-decorationbox-shadowoutline等。

三、两者的关系

1.重排一定会导致重绘,但重绘不一定导致重排

举例来说,以渐变背景色为例,宽度的改变引起重排,那么渐变背景色就要根据新的宽度进行重新生成背景色。而改变背景色,只需要重新绘制,但页面布局不变,不会发生重排。

2.重绘和重排可能同时发生。

重绘和重排同时触发的典型场景:修改元素的尺寸和位置、添加和删除DOM元素、浏览器窗口大小改变、修改元素的显示属性(display属性从none变为其他值、visibility属性从hidden变为visible)

四、优化策略

  • 减少DOM操作:尽量减少直接操作DOM,尤其是大量DOM元素时。
  • 合并DOM操作:将多个DOM操作合并成一个,以减少重排和重绘的次数。
  • 使用CSS类:通过修改CSS类来改变元素的样式,而不是直接操作DOM元素的样式属性。
  • 利用CSS3硬件加速:使用CSS3的transform、opacity等属性可以通过GPU加速来提高渲染速度,减少重绘的开销。
  • 使用新技术:批量修改DOM元素,使用DocumentFragmentrequestAnimationFrame等技术来优化性能。
  • 操作延迟:尽量避免在布局未稳定时(如调整窗口大小)读取或修改布局属性,因为这可能导致额外的重排。
  • 使用虚拟DOM:在JavaScript框架中,可以使用虚拟DOM来优化DOM的更新过程,减少不必要的重排和重绘。

希望对你有所帮助,下期再见!


http://www.ppmy.cn/ops/93058.html

相关文章

AI 手机的技术展望

某某领导问到我,AI手机这个产业发展如何?对于,地方科技园区,应该如何发展相关产业?我一时还真说不上来,于是,查了一下资料,大概应对了一下。 一:AI手机的定义 首先&…

Android顶部标题栏自定义,添加按钮

1. 先写一个标题栏的layout, 放在工程的res/layout下&#xff0c;如下: <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_par…

windows和office微软官方免费激活教程

微软提供了windows系统和office的官方免费激活&#xff0c;其实不用去买什么激活码&#xff0c;官方提供了激活方式&#xff0c;完全免费。目前测试没发现什么问题&#xff0c;windows还支持永久激活&#xff0c;比一些乱七八糟的kms激活工具还省心。 github地址&#xff1a;Gi…

【matlab版】如何利用代码计算声音信号的声压级

1、声压&#xff08;Sound Pressure&#xff09; 声压是声波传播过程中引起的介质&#xff08;如空气、水等&#xff09;中的压力变化。它是声波的基本物理量之一&#xff0c;用来描述声波在某一位置上的瞬时压力大小。 声压的单位是帕斯卡&#xff08;Pa&#xff09;&#x…

甄选范文“论数据湖技术及其应用”软考高级论文系统架构设计师论文

论文真题 请围绕“数据湖技术及其应用”论题,依次从以下三个方面进行论述。 1.概要叙述你所参与管理或开发的软件项目,以及你在其中所承担的主要工作。 2.详细阐述数据湖技术,并从主要数据来源、数据模式(Schema)转换时机、数据存储成本、数据质量、面对用户和主要支撑…

贝叶斯优化算法(Bo)与最小二乘支持向量机(LSSVM)结合的预测模型(Bo-LSSVM)及其Python和MATLAB实现

### 一、背景 在机器学习领域&#xff0c;模型的性能往往依赖于其超参数的选择。这些超参数的调优是一个重要而复杂的问题&#xff0c;尤其在复杂模型&#xff08;如支持向量机&#xff09;中。当模型的性能依赖于多个超参数时&#xff0c;传统的网格搜索和随机搜索方法可能显…

香橙派下安装neo4j

在香橙派(Orange Pi)上安装Neo4j图数据库可以通过以下步骤完成。假设你使用的是基于Debian的Linux发行版(如Armbian),以下是详细的安装步骤: 1. 更新系统 首先,确保你的系统是最新的。打开终端并运行以下命令: sudo apt update sudo apt upgrade -y 2. 安装Java N…

Java常用配置

Java 一、Java发展下载路径JDK和JRE的区别历史由来 二、编译过程Java 基本原理三、安装JDK设置系统默认Java版本设置JAVA_HOME环境变量 三、CMD设置CMD快捷方式CMD命令窗口的编码格式 四、端口操作 一、Java发展 下载路径 JDK下载路径&#xff1a;(推荐下载JDK8u202) https:/…