0

0

CSS如何让图片在加载完后渐显

P粉602998670

P粉602998670

发布时间:2026-03-17 10:59:09

|

441人浏览过

|

来源于php中文网

原创

图片渐显需同时处理缓存监听、尺寸声明和CSS新特性兼容性:初始设opacity:0并配transition,用JS监听load/error事件或现代浏览器用:has(img:loaded),且必须声明width/height防布局抖动。

css如何让图片在加载完后渐显

图片加载完成前先隐藏,避免闪跳

浏览器默认会边加载边渲染图片,未加载完时占位空白或拉伸变形,一加载完就突然“啪”一下出现,用户体验割裂。核心思路是:初始设为 opacity: 0 + transition,等 load 事件触发后再加类切换透明度。

常见错误现象:
– 直接对 <img>opacity: 0 但没配 transition,加载完手动改 opacity: 1 仍无动画
– 用 visibility: hidden 替代 opacity,结果过渡失效(visibility 不支持过渡)
– 忘记处理加载失败的情况,error 事件没监听,图片挂了就一直黑屏

实操建议:
– 给图片默认加一个类如 fade-in-img,CSS 中定义 opacity: 0; transition: opacity 0.3s ease;
– JS 监听 load 事件,成功后添加 loaded 类(对应 opacity: 1
– 同时监听 error,失败时也加 loaded 类或 fallback 样式,避免无限等待

纯 CSS 方案:用 loading="lazy" 配合 :has()(仅现代浏览器)

Chrome 121+、Safari 17.4+ 支持 :has(),可以检测图片是否加载完成。虽然不依赖 JS,但兼容性差,目前只适合渐进增强场景。

立即学习前端免费学习笔记(深入)”;

使用场景:
– 内部管理后台、可控环境下的新项目
– 不想引入 JS 逻辑,且能接受 Safari/Chrome 最新版以外用户无动画

参数差异:
loading="eager" 会绕过懒加载,让 :has(img:loaded) 更快匹配
– 若用 loading="lazy",需等进入视口才触发加载,:has() 匹配也会延迟

示例 CSS:

.fade-img { opacity: 0; transition: opacity 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); }<br>.fade-img:has(:is(img:loaded)) { opacity: 1; }

HIX Translate
HIX Translate

由 ChatGPT 提供支持的智能AI翻译器

下载

JS 加载监听必须处理缓存命中情况

图片从内存或磁盘缓存中秒出时,load 事件可能在 DOM 解析完成前就已触发,导致 JS 绑定监听太晚,动画永远不执行。

容易踩的坑:
– 只在 DOMContentLoaded 后批量绑定 load,错过缓存图片
– 用 img.complete 判断是否已加载,但没立刻应用动画类

实操建议:
– 对每个 <img> 创建即检查 img.complete === true
– 若为 true,直接加 loaded 类;否则再监听 load
– 不要依赖全局 window.onload,它等所有资源(含 CSS/JS)完成,太晚

简短示例:

document.querySelectorAll('img.fade-in-img').forEach(img => {<br>  if (img.complete) {<br>    img.classList.add('loaded');<br>  } else {<br>    img.addEventListener('load', () => img.classList.add('loaded'));<br>    img.addEventListener('error', () => img.classList.add('loaded'));<br>  }<br>});

过渡性能与图像解码开销

单纯加 opacity 过渡不会触发重排(reflow),但若图片宽高未设,加载后尺寸变化会引发布局抖动,抵消渐显效果。

性能影响:
– 没设 width/height 的图片,加载后重绘范围更大,opacity 动画可能卡顿
– 在低端设备上,大量图片同时渐显可能堆积合成层,造成掉帧

实操建议:
– 所有 <img> 必须声明 widthheight 属性(可配合 aspect-ratio 做响应式)
– 避免对父容器用 transform: scale() 等触发全图重绘的操作
– 超过 10 张图批量入场时,考虑加 stagger 延迟(如每张延后 0.05s),减轻帧压力

图片加载渐显看着简单,真正跑稳要同时掐准三件事:缓存路径的监听时机、尺寸声明对渲染流水线的影响、以及 :has() 这类新特性的落地水位——漏掉任意一个,用户看到的就不是淡入,而是卡顿、闪跳或者干脆没反应。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1083

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

852

2023.11.06

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

513

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2023.10.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

448

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

532

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

576

2023.07.28

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

10

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.0万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 43.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号