波浪文字(逐字起伏振幅可控 CSS 源码)

CSSJS 许可:自研原创

波浪文字组件源码:逐字拆分后按延迟错峰起伏,振幅与速度可调,支持输入自定义文本重新生成,纯 CSS 关键帧实现,适合海报标题、Banner 与节日氛围文案。

效果演示(真实可交互)

下方「粤喵波浪文字 WAVE」的每个字都在做上下起伏,相邻字符依次错开半拍,形成海浪推进的视觉效果。拖动「振幅」滑块可以把波浪从 4px 微澜调到 36px 巨浪;拖动「速度」滑块可以控制起伏快慢;在文本输入框里输入任意内容并点击「生成」,文字会即时重新拆分、按新内容起浪。

粤喵波浪文字 WAVE

完整代码

HTML 结构:JS 把一句话拆成单个字符的 <span>,并给每个字符写入错峰延迟:

<h2 class="wv-line" id="wvLine"></h2>

核心 CSS:每个字符是一个行内块,套用同一个上下位移关键帧,--wv-d 是错峰延迟,--wv-amp 是振幅:

.wv-line span {
  display: inline-block;
  animation: wvWave var(--wv-dur, 1.8s) ease-in-out infinite;
  animation-delay: var(--wv-d, 0s);
}
@keyframes wvWave {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(calc(var(--wv-amp, 14px) * -1)); }
}

原生 JS:拆分字符并写入延迟,滑块实时修改 CSS 变量:

function split(text) {
  line.textContent = '';
  [...text].forEach((ch, i) => {
    const s = document.createElement('span');
    s.textContent = ch === ' ' ? '\u00A0' : ch;
    s.style.setProperty('--wv-d', i * 0.06 + 's');
    line.appendChild(s);
  });
}
amp.addEventListener('input', () => {
  stage.style.setProperty('--wv-amp', amp.value + 'px');
});

参数说明

参数默认值说明
振幅 --wv-amp14px每个字起伏的最大位移,滑块 4–36px
周期 --wv-dur1.8s一次起伏的时长,滑块 0.6–3.2s
错峰延迟 --wv-di × 0.06s相邻字符的时间差,越大波浪越平缓
文本内容粤喵波浪文字 WAVE输入框任意修改后重新生成

兼容性与性能

常见问题

Q: 波浪看起来是「抖动」而不是「推进」? 错峰延迟 --wv-d 太小或周期太长都会让相邻字趋同。把延迟系数从 0.06s 提到 0.1s,并让周期保持在 2s 以内。

Q: 想只让部分字起伏? 拆分逻辑里给不需要起伏的字符跳过 animation 即可,或对整词用 <span class="wv-static"> 包裹。

Q: 页面加载时希望先静止后起浪? 给关键帧加上 0% 保持静止段(如 0%, 30% 位移为 0),再配合动画延迟即可。

Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核