0

0

CSS如何实现页面加载时的进度条拉满动画

P粉602998670

P粉602998670

发布时间:2026-03-12 17:01:32

|

164人浏览过

|

来源于php中文网

原创

最稳纯CSS实现是用linear-gradient配合background-position动画模拟进度条拉满,通过position: relative容器与伪元素absolute覆盖,以background-position数值映射实现无缝左移,配合CSS变量--ui-loading-progress供JS接管,时长设2.5s匹配真实加载节奏,移动端加will-change优化帧率。

css如何实现页面加载时的进度条拉满动画

linear-gradient 模拟进度条拉满动画最稳

纯 CSS 实现“页面加载时进度条从 0% 拉到 100%”,本质不是监听真实加载,而是用一个可控的动画模拟视觉反馈。直接上 linear-gradient 配合 background-position 动画,比 JS 控制更轻、无阻塞、兼容性好(Chrome 26+ / Firefox 16+ / Safari 6.1+)。

常见错误是试图用 width 动画 + overflow: hidden,结果在 flex 容器或 transform 父级里错位、缩放失真;或者滥用 @keyframes 改变 background-size,导致边缘模糊或重绘抖动。

  • 进度条容器必须设 position: relative,内部伪元素用 position: absolute 覆盖
  • 动画用 background-position: 0% 0%, 100% 0%background-position: -200% 0%, 0% 0% 实现无缝左移拉满效果
  • 别给伪元素加 border-radius 再套动画——圆角会参与重绘,iOS Safari 上容易卡顿

:root 里定义加载状态变量,方便后期接入 JS 控制

虽然纯 CSS 能跑通基础动画,但真实项目里往往需要“加载完成就停住”或“出错时变红”。这时候不能删掉动画,而是在 :root 里预留 CSS 变量,让 JS 只需改一个值就能接管。

比如定义 --loading-progress: 0,再用 transition: background-position 0.3s ease-out 配合 JS 设置 document.documentElement.style.setProperty('--loading-progress', '100'),就能平滑终止动画。

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

Krea AI
Krea AI

多功能的一站式AI图像生成和编辑平台

下载
  • 变量名别用 --progress 这种太泛的,容易和第三方库冲突,推荐 --ui-loading-progress
  • 不要在 @keyframes 里直接引用变量(CSS 不支持),得靠 background-position 的数值映射来间接响应
  • 如果用了 CSS-in-JS 库(如 Emotion),注意它可能把 :root 变量注入时机晚于动画触发,首次加载会闪一下

动画时间要匹配真实资源加载节奏,别硬写 1s

很多人设 animation-duration: 1s,结果首屏图片还没解码完,进度条已经跑到头了,用户觉得“假”。真正合理的做法是让动画总时长略长于预期最大加载耗时,再配合 JS 提前终止。

实测:Webpack 打包后首屏 JS/CSS 在 3G 网络下平均 1.8s 加载完,所以动画设 2.5s 更可信;若用 font-display: swap 加载字体,还要额外预留 0.3s。

  • 别用 ease-in-out——开头太慢,用户没感知;推荐 cubic-bezier(0.34, 1.1, 0.5, 1),前段加速明显,后段收得稳
  • 移动端记得加 will-change: background-position,否则 iOS Safari 动画帧率可能掉到 30fps
  • 如果页面有 WebP 图片 fallback 到 JPEG,加载时间波动大,建议动画时长设成 3s,并允许 JS 在 load 事件后 100ms 强制置 100%

兼容旧浏览器时,background-clip 替代方案更可靠

IE11 和部分安卓 4.x 浏览器不支持 background-position 动画的平滑插值,会一帧跳到终点。这时换用 background-clip: text + color 动画更稳妥,虽然只适用于文字型进度提示,但至少不崩。

原理是把进度条文字变成“镂空”,用渐变色背景透出来,再动 color 值控制显示范围——这个属性在老浏览器里动画支持度反而更好。

  • 必须加 -webkit-background-clip: text-webkit-text-fill-color: transparent 双写
  • 别用 rgba() 渐变做背景,IE11 会渲染成纯黑;改用十六进制色值或 hsl()
  • 这种方案无法做细条形进度,适合“Loading… 30%”这类带数字的提示,别硬套到顶部细横条上
实际最难的不是写对那几行 CSS,而是判断“什么时候算加载完成”——DOMContentLoaded?所有 imgload?还是等关键 API 返回?这个边界点一旦定错,再顺滑的动画也显得虚假。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

1057

2023.08.11

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

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

838

2023.11.06

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

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

530

2023.06.20

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

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

576

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

6207

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

492

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

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

精品课程

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

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.3万人学习

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

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