渐变微光加载动画(Gradient Shimmer 流光进度条)
渐变流光加载条,三色渐变循环流动叠加高光扫过,视觉轻盈现代,支持三套渐变主题、速度调节与暂停,纯 CSS 实现零依赖,适合内容生成、AI 响应等待等场景。
效果演示(真实可交互)
渐变条内层三色渐变持续横向流动,外层一道白色高光周期扫过,双层叠加出”微光”质感。海蓝 / 落日 / 森林三套渐变一键切换,速度滑块实时控制流动节奏。
正在生成内容…
完整代码
HTML 结构:
<div class="gs-bar">
<span class="gs-fill"></span> <!-- 渐变流动层 -->
<span class="gs-shimmer"></span> <!-- 高光扫过层 -->
</div>
CSS 核心:
.gs-bar {
--gs-dur: 2.4s;
--gs-a: #5ad8ff; --gs-b: #6c8cff; --gs-c: #b388ff;
position: relative; width: 320px; height: 22px;
border-radius: 999px; overflow: hidden;
background: #e3e8f5; /* 轨道底色 */
}
/* 渐变流动层:背景放大 3 倍后平移,形成连续流动 */
.gs-fill {
position: absolute; inset: 0; border-radius: 999px;
background: linear-gradient(90deg, var(--gs-a), var(--gs-b), var(--gs-c), var(--gs-a));
background-size: 300% 100%;
animation: gs-flow var(--gs-dur) linear infinite;
}
@keyframes gs-flow { to { background-position: 300% 0; } }
/* 高光扫过层:白亮斜带从右向左掠过 */
.gs-shimmer {
position: absolute; inset: 0; border-radius: 999px;
background: linear-gradient(105deg, transparent 40%, rgba(255,255,255,.85) 50%, transparent 60%);
background-size: 250% 100%;
animation: gs-sweep calc(var(--gs-dur) * 1.2) ease-in-out infinite;
}
@keyframes gs-sweep { 0% { background-position: 120% 0; } 100% { background-position: -120% 0; } }
JS(调速): stage.style.setProperty('--gs-dur', (2.4 / speed).toFixed(2) + 's'),两层面板共用同一变量,节奏始终同步。
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 流动周期 | --gs-dur | 渐变循环一圈的时长,默认 2.4s |
| 渐变色 | --gs-a / --gs-b / --gs-c | 三色渐变,改任意一色即换主题 |
| 高光亮度 | rgba(255,255,255,.85) | 降低透明度可减弱扫光存在感 |
| 条尺寸 | .gs-bar 的宽高 | 高度 10-26px 均合适,圆角随高度调整 |
| 轨道底色 | background: #e3e8f5 | 用比页面背景略深的灰色,对比清晰 |
| 扫光速率 | calc(var(--gs-dur) * 1.2) | 让扫光略慢于渐变,避免视觉打架 |
兼容性与性能
- 两层面板都只动
background-position,属合成器可优化的属性,不触发重排 - 兼容 Chrome / Firefox / Safari / Edge 最新版,移动端表现一致
- 渐变与扫光均为纯 CSS,无定时器、无 JS 计算,页面空闲时几乎零 CPU 占用
- 高光层白色透明度较高,深色主题下建议换成
rgba(255,255,255,.35)或深色高光 - 适合 AI 回复生成、文件解析、报表计算等”不可预估时长”的等待场景,比转圈更能传递”正在处理”的语义
常见问题
Q: 渐变看起来是跳动的而不是流动的? 检查 background-size 是否设为 300% 100%,且 keyframes 终点 background-position 与尺寸倍数一致(300% 对应 300% 0),否则首尾无法无缝衔接。
Q: 想要一条不确定宽度的加载条(Indeterminate)? 把 .gs-fill 改为 width: 40% 并在容器内左右往返移动(animation: gs-slide 配合 left 或 translateX),其余不变。
Q: 高光扫过太刺眼怎么办? 降低高光层透明度,或把渐变角度从 105° 调到 120°,让亮带更细更长,观感更柔和。
Q: 能用在深色背景上吗? 可以,给 .gs-bar 的轨道底色换成深灰(如 #232a4d),三色渐变本身亮度足够,深浅背景都适用。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布:2026-09-01 · 最近更新:2026-09-01
- 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
- 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。