翻转文字(逐字 X 轴翻转交错 CSS 源码)

CSSJS 许可:自研原创

翻转文字组件源码:逐字绕 X 轴翻转 360° 并带交错延迟与回弹缓动,支持悬停触发与按钮单次翻转,纯 CSS 3D 变换实现,适合 Logo 标语与强调型标题。

效果演示(真实可交互)

下方「粤喵翻转过山车」七个字,把鼠标放上去,每个字会像过山车一样绕水平轴翻转一圈,相邻字依次错开 0.05 秒,偶数位反向翻转,产生波浪般的交错感。点击「翻转一次」按钮,所有字会同步翻一个 360°,结束后恢复;取消勾选「悬停翻转」可以关闭悬停触发,只保留按钮控制。

粤喵翻转过山车

完整代码

HTML 结构:JS 把词语拆成字符 span,并写入错峰延迟:

<div class="fp-stage">
  <p class="fp-word" id="fpWord">粤喵翻转过山车</p>
</div>

核心 CSS:父容器开 perspective 建立 3D 视场,字符默认在悬停时用 transition 翻转,偶数字反向:

.fp-stage { perspective: 600px; }
.fp-word span {
  display: inline-block;
  transform-origin: 50% 50%;
  transition: transform .7s cubic-bezier(.34, 1.56, .64, 1) var(--d, 0s);
}
.fp-word.hoverable:hover span { transform: rotateX(360deg); }
.fp-word.hoverable:hover span:nth-child(2n) { transform: rotateX(-360deg); }

按钮单次翻转用关键帧 + animationend 清理:

.fp-word span.flip { animation: fpFlip .8s cubic-bezier(.34, 1.56, .64, 1) both; animation-delay: var(--d, 0s); }
@keyframes fpFlip {
  0% { transform: rotateX(0); }
  100% { transform: rotateX(360deg); }
}
btn.addEventListener('click', () => {
  [...word.children].forEach((s) => {
    s.classList.add('flip');
    s.addEventListener('animationend', () => s.classList.remove('flip'), { once: true });
  });
});

参数说明

参数默认值说明
透视距离600pxperspective 越小翻转立体感越强
翻转时长.7s / .8s悬停过渡与按钮动画的时长
错峰延迟 --di × 0.05s相邻字翻转的时间差
翻转角度±360°奇数位正向、偶数位反向
缓动cubic-bezier(.34, 1.56, .64, 1)带回弹的缓出曲线

兼容性与性能

常见问题

Q: 翻转时文字看起来是扁的? 透视距离太小(如 100px)会过度透视。加大到 500–800px,翻转过程更接近真实的「翻面」。

Q: 想做成垂直翻页效果? 把 rotateX 换成 rotateY,并把 transform-origin 改为 0 50%(左边为轴),就是常见的翻牌动画。

Q: 触屏上没有悬停怎么触发? 本组件已提供「翻转一次」按钮;也可以把悬停类改为 :active 或监听 touchstart。

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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核