描边填充文字(悬停渐变填充 CSS 源码)

CSSJS 许可:自研原创

描边填充文字组件源码:双层文字叠加实现悬停时空心描边渐变为渐变填充,蓝紫、青绿、橙红三套主题,支持自动呼吸填充,纯 CSS 实现,适合科技风标题与空状态引导。

效果演示(真实可交互)

下方「描边填充 OUTLINE」默认是灰色描边的空心字,把鼠标移上去,描边逐渐淡出,露出底下蓝紫渐变填充的实心字,像墨水滴进空字模。下拉框可以切换蓝紫渐变、青绿渐变、橙红渐变三套填充主题;勾选「自动呼吸填充」后不再需要悬停,描边会以 2.6 秒周期循环淡入淡出,让填充色「呼吸」般地显现。

描边填充 OUTLINE 描边填充 OUTLINE
悬停文字查看填充效果

完整代码

HTML 结构:两层完全相同的文字用网格堆叠(底层渐变填充、顶层描边):

<div class="of-box" id="ofBox">
  <span class="of-layer of-fill" id="ofFill">描边填充 OUTLINE</span>
  <span class="of-layer of-stroke" id="ofStroke">描边填充 OUTLINE</span>
</div>

核心 CSS:.of-fill 是渐变实心层,.of-stroke 是透明填充 + 描边层,悬停时描边层淡出:

.of-box { display: inline-grid; }
.of-layer { grid-area: 1 / 1; }
.of-fill {
  color: transparent;
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  background-image: linear-gradient(135deg, #6c8cff, #a96cff);
}
.of-stroke {
  color: transparent; -webkit-text-stroke: 2px #8a93a6;
  transition: opacity .5s ease;
}
.of-box:hover .of-stroke { opacity: 0; }   /* 悬停露出填充层 */

自动呼吸模式用关键帧循环控制描边层透明度:

.of-box.loop .of-stroke { animation: ofBreathe 2.6s ease-in-out infinite; }
@keyframes ofBreathe {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

参数说明

参数默认值说明
描边宽度2px-webkit-text-stroke 的粗细
填充主题蓝紫渐变蓝紫 / 青绿 / 橙红三套渐变
过渡时长.5s描边层淡出的时间
呼吸周期2.6s自动循环一个明暗来回
堆叠方式inline-grid两层文字精确重合

兼容性与性能

常见问题

Q: 描边字在 Firefox 上显示为纯色没有描边? 现代 Firefox 已支持 -webkit-text-stroke;早期版本可用 @supports (-webkit-text-stroke: 1px black) 判断并降级为实色文字。

Q: 想让填充从下往上「长」出来而不是淡出? 把描边层改为 clip-path: inset(100% 0 0 0) 并在悬停过渡到 inset(0),即可实现自上而下的裁切填充。

Q: 呼吸循环和悬停同时开启会冲突吗? 组件已处理:开启循环时动画接管描边层,悬停过渡被覆盖,不会双重触发。

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

✍️ 作者与审核