content-visibility: auto的核心机制是让浏览器智能跳过屏幕外元素的渲染工作,包括布局和绘制,直到它们接近视口时才渲染。这与虚拟滚动等传统方案相比优势明显,只需要一行CSS就能实现近似效果。值得注意的是必须配合`contain-intrinsic-size`属性使用,否则会导致布局抖动。

这个属性用来指定未渲染元素的占位尺寸,对于动态内容可能需要JavaScript动态计算更新。性能提升数据很惊人,在1000项列表中初始加载从1200ms降到400ms,甚至提到7倍的渲染性能提升。不过要注意这不会减少网络请求,与传统懒加载方案是互补而非替代关系。关于兼容性,指出Chrome 85+、Edge 85+和Safari 15.4+都已支持,但Firefox支持度较差。可访问性方面,屏幕阅读器可能无法读取未渲染内容,需要额外处理。

content-visibility: auto 是 CSS 中一个强大的性能优化属性,它通过控制浏览器渲染内容的范围,延迟或跳过屏幕外(offscreen)元素的渲染,从而显著提升页面的初始加载速度和交互流畅度。

content-visibility: auto 的核心价值在于其能够智能地跳过屏幕外元素的渲染(包括布局和绘制),同时保留其布局占位空间,并在元素接近视口时自动触发渲染,从而在减少初始渲染开销和保持流畅用户体验之间取得平衡。

🎯 一、content-visibility: auto 的作用与原理

  • 智能跳过渲染: 当元素设置 content-visibility: auto 后,浏览器会跳过其初始屏幕外内容的渲染工作(包括布局和绘制),但会保留其布局占位空间。当元素滚动到接近视口时(通常在视口外约500px),浏览器会自动触发渲染其内容。

  • 自动应用布局限制: 此属性会自动为元素应用 contain: layout style paint,创建独立的渲染格式化上下文,确保其内部布局、样式和绘制不会影响外部文档,这进一步优化了渲染性能。

  • 性能提升: 通过减少初始渲染时需要处理的元素数量,可以显著缩短首次内容渲染时间(FCP)和可交互时间(TTI),并降低内存占用。测试表明,在包含1000项的列表中,初始加载时间可能从1200ms减少到400ms,内存占用从200MB降至50MB,滚动流畅度也能得到大幅提升(如从10 FPS到60 FPS)。

📝 二、如何使用 content-visibility: auto

1. 基础用法

为需要优化的元素添加 content-visibility: auto 和 contain-intrinsic-size

css

.optimized-element {content-visibility: auto; /* 开启智能跳过渲染 */contain-intrinsic-size: 200px 1000px; /* 指定占位宽度和高度 */
}

contain-intrinsic-size 用于为未渲染的元素提供占位尺寸,防止滚动条跳动。其值应尽可能接近元素的真实尺寸。

2. 处理动态内容

若元素内容或尺寸会动态变化,需通过 JavaScript 更新 contain-intrinsic-size

javascript

// 获取元素的实际高度
const element = document.querySelector('.dynamic-element');
const actualHeight = element.scrollHeight;// 更新 contain-intrinsic-size
element.style.containIntrinsicSize = `auto ${actualHeight}px`;

有时,可能需要通过强制重绘来确保更新生效,例如添加一个极短的动画。

3. 长列表优化示例

对于长列表,可以为每个列表项应用优化。

css

.long-list-item {content-visibility: auto;contain-intrinsic-size: 100px 50px; /* 根据列表项实际大小调整 */
}
4. 长文章或章节优化示例

对于包含多个章节的长篇文章,可以延迟渲染屏幕外的章节。

css

.chapter {content-visibility: auto;contain-intrinsic-size: auto 800px; /* 预估高度为800px */margin-bottom: 20px;
}

⚠️ 三、注意事项与最佳实践

  1. 必须指定 contain-intrinsic-size: 这是避免布局偏移和滚动条抖动的关键。对于高度可变的元素,需使用 JavaScript 动态计算并更新其值。

  2. 可访问性考虑: 未渲染的内容可能无法被屏幕阅读器读取。确保关键内容在初始 HTML 中,或使用 aria-* 属性补充信息。content-visibility: auto 的元素在屏幕外时,其内容在文档对象模型和可访问性树中仍然存在,但使用 display: none 或 visibility: hidden 隐藏的元素如果未渲染,也可能无法被访问,有时需使用 aria-hidden="true"

  3. 兼容性: 主要支持 Chrome 85+、Edge 85+、Opera 71+、Safari 15.4+。Firefox 的实验性支持可能需要配置。建议使用 @supports 进行特性检测并提供降级方案。

    css

    .item {content-visibility: auto;contain-intrinsic-size: 100px 500px;
    }
    /* 旧版浏览器回退方案 */
    @supports not (content-visibility: auto) {.item {will-change: transform; /* 或其他优化手段,如考虑虚拟滚动 */}
    }
  4. 避免与某些属性混用: 谨慎与 position: sticky 等属性同时使用,在 Flex 或 Grid 容器中可能需要额外测试。

  5. SEO 考虑: 部分搜索引擎爬虫可能无法触发滚动渲染。确保关键内容在初始 HTML 中,或考虑服务端渲染。

🔄 四、content-visibility: auto 与其他优化技术对比

技术原理优点缺点
content-visibility: auto浏览器原生跳过屏幕外渲染实现简单,无需复杂JS,保留DOM状态需管理占位尺寸,兼容性需考虑
虚拟滚动 (Virtual Scroll)手动控制仅渲染可视区域元素精准控制内存和性能,兼容性好实现复杂,需处理滚动位置和动态尺寸
懒加载 (Lazy Loading)按需加载数据或资源减少初始数据量,结合AJAX灵活通常需JS实现,用户体验可能不连贯

content-visibility: auto 与其他优化技术并非互斥,可以根据场景结合使用。例如,对长列表使用 content-visibility: auto,同时对列表中的图片使用懒加载。

🚀 五、适用场景

  • 长列表或网格布局:如商品列表、新闻流、图片画廊。

  • 长文档或多章节内容:如博客文章、帮助中心、文档页面。

  • 单页应用(SPA)中的标签页或折叠内容:隐藏未激活的视图。

  • 无限滚动页面:随着用户滚动动态加载和渲染内容。

💎 总结

content-visibility: auto 是一个强大的浏览器原生性能优化工具,通过一行 CSS 就能为内容密集的页面带来显著的渲染性能提升。使用时牢记:

  • 核心content-visibility: auto + contain-intrinsic-size

  • 关键:处理好动态内容和占位尺寸,避免布局偏移。

  • 注意:关注可访问性、兼容性和 SEO 影响。

合理运用 content-visibility: auto,可以让你的网页滚动更加流畅,用户体验更加出色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96207.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96207.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96207.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过uniapp将vite vue3项目打包为android系统的.apk包,并实现可自动升级功能

打包vue项目,注意vite.config.ts文件和路由文件设置 vite.config.ts,将base等配置改为./ import {fileURLToPath, URL } from node:urlimport {defineConfig } from vite import vue from @vitejs/plugin-vue import AutoImport from unplugin-auto-import/vite import Com…

经营帮租赁经营板块:解锁资产运营新生态,赋能企业增长新引擎

在商业浪潮奔涌向前的当下,企业资产运营与租赁管理的模式不断迭代,“经营帮” 以其租赁经营板块为支点,构建起涵盖多元业务场景、适配不同需求的生态体系,成为众多企业破局资产低效困局、挖掘增长新动能的关键助力。本文将深度拆解…

C语言---编译的最小单位---令牌(Token)

文章目录C语言中令牌几类令牌是编译器理解源代码的最小功能单元,是编译过程的第一步。C语言中令牌几类 1、关键字: 具有固定含义的保留字,如 int, if, for, while, return 等。 2、标识符: 由程序员定义的名称,用于变…

机器学习 | Python中进行特征重要性分析的9个常用方法

在Python中,特征重要性分析是机器学习模型解释和特征选择的关键步骤。以下是9种常用方法及其实现示例: 1. 基于树的模型内置特征重要性 原理:树模型(如随机森林、XGBoost)根据特征分裂时的纯度提升(基尼不纯度/信息增益)计算重要性。 from sklearn.ensemble import Ra…

心路历程-了解网络相关知识

在做这个题材的时候,考虑的一个点就是:自己的最初的想法;可是技术是不断更新的; 以前的材料会落后,但是万变不能变其中;所以呈现出来的知识点也相对比较老旧,为什么呢? 因为最新的素…

CAT1+mqtt

文章目录 MQTT知识点mqtt数据固定报头可变报头(连接请求)有效载荷 阿里云MQTT测试订阅Topic下发数据给MQTT.fxMQTT.fx 发布消息给服务器 下载mqtt(C-嵌入式版)我的W5500项目路径使用Cat1连接阿里云平台AT指令串口连接1. 开机联网2. 激活内置SIM卡(贴片卡)3. 我这里使用连接的是…

AiPPT怎么样?好用吗?

AiPPT怎么样?好用吗?AiPPT 是一款智能高效的PPT生成工具,通过AI技术快速将主题或文档(如Word/PDF)转化为专业PPT,提供超10万套行业模板,覆盖商务、教育等22场景,支持一键生成大纲、文…

恶补DSP:2.F28335的定时器系统

一、定时器原理F28335 城市的三座时钟塔(Timer0、Timer1、Timer2)是城市时间管理的核心设施,每座均为32位精度,依靠城市能源脉冲(系统时钟 SYSCLKOUT,典型频率为150 MHz)驱动。它们由两个核心模…

用倒计时软件为考研备考精准导航 复习 模拟考试 日期倒计时都可以用

考研,是一场与时间的博弈。从决定报名的那一刻起,日历上的每一个数字都被赋予了特殊意义 —— 报名截止日、现场确认期、初试倒计时、成绩查询点…… 这些节点如同航标,指引着备考者的方向。而在这场漫长的征途里,一款精准、易用的…

React学习(七)

目录:1.react-进阶-antd-搜索2.react-进阶-antd-依赖项说明 3.react-进阶-antd-删除1.react-进阶-antd-搜索我们jsx代码里只能返回一个最顶层的根元素下拉框简化写法:把这个对象结构赋值一下:清空定义个参数类型做修改事件需要定义三个…

Unix Domain Socket(UDS)和 TCP/IP(使用 127.0.0.1)进程间通信(IPC)的比较

Unix Domain Socket(UDS)和 TCP/IP(使用 127.0.0.1 或 localhost)都是进程间通信(IPC)的方式,但它们在实现、性能和适用场景上有显著区别。以下是两者的对比:1. 通信机制Unix Domain…

SQL中对时间操作的函数

以下是SQL中常用时间操作函数的汇总,按功能分类整理,结合多个权威来源内容综合而成: 一、获取当前时间 函数名称功能说明示例适用数据库CURDATE()获取当前日期(不含时间)SELECT CURDATE(); → 2024-08-21MySQL, Mari…

NUS PC5215 Lecture分析 Week1 Python基础

NUS PC5215 Lecture分析 Week1 Python基础前言Python基础数据类型保留字表达式Import 相关库IEEE浮点数前言 课程网站 作为一名计算机本科毕业的学生,该课程有点类似于本科期间学的数值分析的进化版,大抵是教会你如何实现各种方法,诸如蒙特卡…

模型私有化部署(Ollama vLLM LMDeploy)

一、魔塔社区平台介绍 1.1 什么是魔塔社区? 魔塔(ModelScope)是由阿里巴巴达摩院推出的开源模型即服务(MaaS)共享平台,汇聚了计算机视觉、自然语言处理、语音等多领域的数千个预训练AI模型。其核心理念是…

C++编程实践--资源管理、标准库、并发与并行

文章目录 资源管理 资源访问 指向资源句柄或描述符的变量,在资源释放后立即赋予新值 lambda函数 当lambda会逃逸出函数外面时,禁止按引用捕获局部变量 避免lambda表达式使用默认捕获模式 资源分配与回收 避免出现delete this操作 使用恰当的方式处理new操作符的内存分配错误 …

“R语言+遥感”的水环境综合评价方法实践技术应用

专题一、R语言概述1.1 R语言特点(R语言)1.2 安装R(R语言)1.3 安装RStudio(R语言)(1)下载地址(2)安装步骤(3)软件配置1.4 第一个程序He…

【项目复盘】【四轴飞行器设计】驱动开发部分

由于在参加面试时总需要花时间一点一点的回忆自己的项目内容,故我打算直接写一系列的项目复盘博客,方便每次面试前的回忆。内容仅作分享交流,如有谬误欢迎指正。 本项目系列的文章目录如下: 【项目复盘】【四轴飞行器设计】驱动…

wpf之ComboBox

前言 wpf中ComboBox的应用非常广泛&#xff0c;本文就来介绍ComboBox在wpf中的应用。 1、非MVVM模式下 1.1 xaml添加元素<ComboBox x:Name"cbx_test1" SelectedIndex" 0" ><ComboBoxItem >小明</ComboBoxItem ><ComboBoxItem &g…

从零开始学AI——13

前言 夏天快要过去&#xff0c;本书也快接近尾声了。 第十三章 13.1 半监督学习 在此之前&#xff0c;我们讨论的所有学习范式都具有非常明确的边界条件&#xff1a; 监督学习&#xff1a;我们拥有大量带标签的数据样本(xi,yi)(x_i, y_i)(xi​,yi​)&#xff0c;目标是学习从输…

k8sday12数据存储(1/2)

目录 一、简单基本存储 1、EmptyDir 1.1概念 1.2作用 1.3配置文件 1.4测试 2、HostPath 2.1概念 2.2作用 2.3配置文件 2.4测试 ①、数据共享 ②、持久化存储 3、NFS 3.1概念 3.2作用 3.3NFS服务安装 ①、设置主节点为NFS服务器 ②、给副节点安装NFS客户端工…