链接悬停下划线 5 种动画(生长/居中/滑入/双线 CSS 源码)
5 种链接悬停下划线动画源码:从左生长、中间展开、下划线滑入、双线扩张、波浪渐变线,纯 CSS 实现,适合导航栏与正文链接。
效果演示(真实可交互)
下方 5 个链接分别演示不同的下划线动画:从左向右生长、从中间展开、下划线滑入、上下双线扩张、波浪渐变线。
完整代码
HTML 结构:链接统一使用 .link 基类,追加类名切换动画:
<a href="#" class="link l-grow">① 从左向右生长</a>
<a href="#" class="link l-center">② 从中间展开</a>
<a href="#" class="link l-slide">③ 下划线滑入</a>
<a href="#" class="link l-double">④ 双线扩张</a>
<a href="#" class="link l-wavy">⑤ 波浪渐变线</a>
核心 CSS:下划线统一由 ::after 伪元素实现,通过改变 width、left 与 transform 得到不同生长方式:
.link { position: relative; text-decoration: none; color: #aab3c2; }
.link::after {
content: '';
position: absolute;
left: 0; bottom: 0;
height: 2px;
background: #6c8cff;
transition: all .35s cubic-bezier(.22, .61, .36, 1);
}
/* ① 从左向右生长 */
.l-grow::after { width: 0; }
.l-grow:hover::after { width: 100%; }
/* ② 从中间向两边展开 */
.l-center::after { left: 50%; width: 0; transform: translateX(-50%); }
.l-center:hover::after { width: 100%; }
/* ③ 从左侧滑入 */
.l-slide::after { left: -100%; width: 100%; opacity: 0; }
.l-slide:hover::after { left: 0; opacity: 1; }
/* ④ 上下双线 */
.l-double::before {
content: '';
position: absolute; left: 0; top: 0;
width: 0; height: 2px;
background: #b388ff;
transition: width .35s cubic-bezier(.22, .61, .36, 1);
}
.l-double:hover::before, .l-double:hover::after { width: 100%; }
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
线高 height | 2px | 下划线粗细 |
| 动画时长 | .35s | 生长速度,越快越干脆 |
| 线颜色 | #6c8cff | 下划线主题色 |
left: 50% | — | 居中展开模式的起点 |
| 缓动曲线 | cubic-bezier(.22,.61,.36,1) | 先快后慢的 ease-out 质感 |
兼容性与性能
- 纯 CSS + 伪元素,零 JS 零依赖,兼容所有现代浏览器
- 动画只改
width与transform,注意width动画会触发布局,性能敏感场景可改用scaleX配合transform-origin实现 - 波浪渐变线使用
background-clip: text时需加-webkit-前缀以兼容 Safari - 正文中大量链接时建议只对 hover 元素做动画,避免无谓的重绘
常见问题
Q: 下划线会跟文字重叠吗? 不会,::after 定位在 bottom: 0,只要给 .link 留出 padding-bottom 就不会压到文字。
Q: 想要更细更淡的线怎么改? 调 height: 1px 并把颜色换成半透明,如 rgba(108, 140, 255, .5)。
Q: 能用于多行文本链接吗? 伪元素定位基于整个链接盒,多行时建议用 background-image 渐变方案替代,或者只做单行场景。
Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名。
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。