文字分割按钮(悬停上下错位分裂动画源码)

CSS 许可:自研原创

纯 CSS 文字分割按钮:利用双层文本 + clip-path 裁剪,悬停时上下两半反向错位,撕裂感十足,适合导航与 CTA 按钮。

效果演示(真实可交互)

悬停文字上下分离再合拢,适合导航与 CTA 按钮

完整代码

HTML 结构(双层文本 + data-text 备用):

<a class="st-btn" href="#">
  <span class="st-top" data-text="粤喵组件库">粤喵组件库</span>
  <span class="st-bottom" data-text="粤喵组件库">粤喵组件库</span>
</a>

CSS 核心代码:

.st-btn { position: relative; display: inline-block;
  padding: 13px 36px; overflow: hidden;
  background: linear-gradient(120deg, #4d96ff, #7c5cff); color: #fff; }

/* 上半层:裁掉下半,悬停时上移 */
.st-top {
  display: block; clip-path: inset(0 0 50% 0);
  transition: transform .38s cubic-bezier(.22,1,.36,1);
}
/* 下半层:裁掉上半,负 margin 对齐,悬停时下移 */
.st-bottom {
  display: block; clip-path: inset(50% 0 0 0);
  margin-top: -1.2em;
  transition: transform .38s cubic-bezier(.22,1,.36,1);
}
.st-btn:hover .st-top { transform: translateY(-38%); }
.st-btn:hover .st-bottom { transform: translateY(38%); }

参数说明

参数取值说明
clip-pathinset(0 0 50% 0) / inset(50% 0 0 0)上下各显示一半文字
margin-top: -1.2em与字号相关让下半层与上半层重合为完整文字
translateY(±38%)百分比相对自身高度分裂距离,越大撕裂感越强
曲线cubic-bezier(.22,1,.36,1)先快后慢的缓出,回弹更自然
overflow: hidden按钮级防止错位时文字溢出按钮

兼容性与性能

常见问题

Q: 为什么需要两层 span? 一层文字无法做到「上下各显示一半且独立移动」,双层叠加后分别裁剪并反向位移,视觉上就产生了文字被撕裂成两半的效果。

Q: margin-top: -1.2em 是什么原理? 两层文本在正常流中会上下排列,用负 margin 把下半层拉回与上半层重叠;数值随字号与行高变化,若换字体需微调。

Q: 能改成左右分裂吗? 可以,把 clip-path 改成 inset(0 50% 0 0) 和 inset(0 0 0 50%),位移改为 translateX(±38%) 即可。

Q: 触屏设备上有效果吗? hover 在触屏上表现为首次点击触发,进入错位态后再次点击才跳转;移动端建议把分裂动画放到 :active 或点击态,避免干扰点击跳转。

许可与来源

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

✍️ 作者与审核