Appearance
波浪条形 Wave Bars
多根竖条通过交错的 scaleY 动画依次升降,形成如音律般的连续波浪起伏效果,极具韵律感。
实时预览
代码
css
.wave-bars {
display: flex;
align-items: center;
gap: 5px;
height: 50px;
}
.wave-bar {
width: 5px;
height: 40px;
background: linear-gradient(180deg, #40b883, #1a7a52);
border-radius: 3px;
animation: wave-motion 1.2s ease-in-out infinite;
}
.wave-bar:nth-child(1) { animation-delay: 0s; }
.wave-bar:nth-child(2) { animation-delay: 0.08s; }
.wave-bar:nth-child(3) { animation-delay: 0.16s; }
.wave-bar:nth-child(4) { animation-delay: 0.24s; }
.wave-bar:nth-child(5) { animation-delay: 0.32s; }
.wave-bar:nth-child(6) { animation-delay: 0.4s; }
.wave-bar:nth-child(7) { animation-delay: 0.48s; }
.wave-bar:nth-child(8) { animation-delay: 0.56s; }
.wave-bar:nth-child(9) { animation-delay: 0.64s; }
.wave-bar:nth-child(10) { animation-delay: 0.72s; }
.wave-bar:nth-child(11) { animation-delay: 0.8s; }
.wave-bar:nth-child(12) { animation-delay: 0.88s; }
@keyframes wave-motion {
0%, 100% {
transform: scaleY(0.3);
opacity: 0.4;
}
50% {
transform: scaleY(1);
opacity: 1;
}
}html
<div class="wave-bars">
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
<div class="wave-bar"></div>
</div>纯 CSS 实现的波浪条形加载动画——通过 @keyframes 和 animation 属性创建循环播放的加载指示器。比 GIF 体积更小、缩放不失真,完全不需要 JavaScript。
快速使用
- 复制 CSS 代码到你的样式文件(含
@keyframes定义) - 在需要显示加载状态的位置添加 HTML 结构
- 调整
width/height控制大小,animation-duration控制速度 - 数据加载完成后移除 loading 元素,释放 GPU 资源
使用场景
- 页面初始加载:在 SPA 或内容较重的页面中,用骨架屏或旋转动画代替白屏等待
- 数据请求等待:按钮提交后显示加载状态,防止重复点击
- 文件上传/下载:配合进度条或环形进度指示操作进度
- 无限滚动加载更多:页面底部显示加载指示器,告知用户内容正在加载
常见问题
Q: Loading 动画什么时候需要停止? A: 数据加载完成后,通过 JavaScript 移除动画元素的 class 或直接移除 DOM 元素。可以给元素加 animation: none 立即停止动画,释放 GPU 资源。
Q: 多个 Loading 元素会互相影响吗? A: 不会。每个 CSS animation 相互独立。但如果页面同时有 20+ 个动画元素,移动端可能出现卡顿。建议一个页面只保留 1-2 个主 loading 指示器。
Q: 如何让 Loading 动画适应不同尺寸? A: 所有尺寸用相对单位或无单位值。建议用 CSS 自定义属性(如 --loader-size: 48px)统一控制,方便全局调整。
浏览器兼容性
本效果使用标准 CSS 属性,所有现代浏览器(Chrome、Firefox、Safari、Edge)均完全支持。
| 浏览器 | 兼容性 |
|---|---|
| Chrome / Edge | ✅ 完全支持 |
| Firefox | ✅ 完全支持 |
| Safari | ✅ 完全支持 |
| 移动端浏览器 | ✅ 完全支持 |
| IE 11 | ⚠️ 部分 @keyframes / animation 需要 -ms- 前缀 |
使用说明
| 属性 | 说明 |
|---|---|
animation-delay 间隔 | 控制波浪频率,间隔越小波浪越紧凑 |
scaleY | 控制条形缩放范围,0.3 ~ 1 效果最佳 |
animation-duration | 控制整体波浪速度 |
| 条形数量 | 可增减 .wave-bar 数量,推荐 8~16 根 |
gap | 控制条形间距,影响波浪密度 |