HTML怎么做气泡上升效果_html气泡上升浮动动画实现【零基础】

作者:袖梨 2026-07-22
用CSS @keyframes实现气泡上升动画需定义位移、缩放与透明度变化,配合position:absolute、transform:translateY()及animation-delay错峰触发,推荐伪元素+自定义类控制延迟与渐变效果。

用 CSS @keyframes 做气泡上升动画最直接

纯 HTML 无法实现动画,必须配合 CSS。核心是用 @keyframes 定义从底部到顶部的位移 + 可选缩放/透明度变化,再通过 animation 应用到气泡元素上。

常见错误是只写 toptransform: translateY() 却没设 position: relative/absolute,导致动画无效果。气泡通常用 <div> 或伪元素 ::before 实现,推荐后者减少 DOM 节点。

  • 气泡容器需设 position: relative,气泡本身设 position: absolute
  • 动画时长建议 3–6s,太快像闪,太慢显滞涩
  • transform: translateY()top 性能更好(触发 GPU 加速)
  • animation-timing-function: cubic-bezier(0.2, 0.8, 0.4, 1) 让上升带点轻盈感,避免线性僵硬

多个气泡不同步上升要靠 animation-delay 随机化

如果所有气泡同时启停,看起来像集体操,失去自然感。真实气泡是错落、不规则上升的——这靠 animation-delay 控制起始时间差实现。

零基础不用手写 10 个不同 delay 值。可以用 CSS 自定义属性 + JS 动态赋值,或直接写 3–5 组预设类名,用 class 切换分配:

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

`.bubble-1 { animation-delay: 0.3s; }.bubble-2 { animation-delay: 1.1s; }.bubble-3 { animation-delay: 1.9s; }`

更省事的做法:在父容器上用 animation: bubble-rise 4s infinite,再让每个气泡用 animation-duration 微调(比如 3.7s / 4.2s),也能打破同步感。

气泡大小渐变和淡出要用 transform + opacity 组合

只上升不够真实,真实气泡越往上体积略胀、边缘略虚、快到水面时开始半透明。这需要在 @keyframes 中同时控制 transform: scale()opacity

注意两个坑:

  • scale(0.8)scale(1.2) 比固定大小更显呼吸感,但别超过 scale(1.4),否则失真
  • opacity 从 0.6 → 1.0 → 0.3 是典型路径:底部稍透(水体遮挡),中段最实,顶部快破灭前又变淡
  • 别在 keyframes 里写 border-radius: 50% 动画——它不支持过渡,气泡会突然变圆或变方

移动端卡顿?关掉 animation-fill-mode 或降帧率

部分安卓 WebView 或低端 iOS 设备跑多个气泡动画会掉帧,尤其当气泡超 15 个或用了 box-shadow。优先排查 animation-fill-mode: forwards ——它会让元素停在终点状态,可能触发重排;改成 none 或干脆去掉。

其他有效手段:

  • will-change: transform 提前提醒浏览器优化(但别滥用,每个气泡都加反而拖慢)
  • animation-timing-function 改成 linear,比 cubic-bezier 计算开销小
  • 气泡数量 > 10 时,用 JS 控制:屏幕外的气泡暂停 animation-play-state: paused
  • 真不行就降级:iOS Safari 下用 @supports (-webkit-animation: none) 单独设更简动画

气泡动画真正的复杂点不在怎么动,而在“动多少”——数量、尺寸、延迟、透明度曲线,全得靠肉眼调。截图对比两版效果,比看一百行代码管用。

相关文章

精彩推荐