输入框聚焦动画(浮动标签 + 渐变下划线 + 辉光描边)

CSS 许可:自研原创

输入框聚焦动画源码:3 款表单动效——浮动标签上浮、渐变下划线展开、彩色辉光描边,聚焦状态一目了然,纯 CSS 实现(浮动标签零 JS),适合登录注册表单。

效果演示(真实可交互)

表单输入框的聚焦反馈决定了填表时的「手感」。演示区提供 3 款风格各异的聚焦动画,全部真实可输入:第一款是浮动标签——点击输入框后占位文字化身的标签上浮缩小并变蓝,输入内容后保持上浮状态,清空后归位;第二款是渐变下划线——聚焦时底部一条蓝紫绿三色渐变线从左往右展开;第三款是辉光描边——搜索框聚焦时边框变紫并泛起彩色投影,左侧放大镜图标同步变色。三者都保留了清晰的 :focus 状态,配合原生输入语义,既好看又不牺牲可访问性。三款动画分别对应三种表单气质:浮动标签适合字段较多的注册页,渐变下划线轻量克制适合设置面板,辉光描边醒目适合搜索入口。所有输入框都保留真实输入与 label 关联,手机端点击 label 也能聚焦,触屏体验完整。聚焦动画的价值在于「状态可感知」:用户一眼就能看出当前正在编辑哪个字段,尤其表单字段较多时能显著降低填错率;三种风格也可以按业务自由混用,不冲突。

① 浮动标签

聚焦或输入后,标签上浮缩小

② 渐变下划线

聚焦时下划线从左往右渐显

③ 辉光描边

聚焦时边框泛起彩色辉光

完整代码

HTML:浮动标签的秘诀是「占位符留空 + label 绝对定位」,通过 :placeholder-shown 判断空态:

<div class="if-field if-float">
  <input id="ifName" type="text" placeholder=" ">
  <label for="ifName">你的名字</label>
</div>

CSS:浮动标签零 JS,聚焦或「有内容」两种状态共用同一套上浮规则:

.if-float label {
  position: absolute; left: 14px; top: 50%;
  transform: translateY(-50%); color: #8892ab; font-size: 14px;
  transition: top .22s cubic-bezier(.34,1.2,.64,1), font-size .22s ease, color .22s ease;
}
/* 聚焦 或 非空占位(即输入了内容)→ 标签上浮 */
.if-float input:focus + label,
.if-float input:not(:placeholder-shown) + label {
  top: 12px; font-size: 11px; color: #6c8cff; font-weight: 600;
}

渐变下划线:伪元素 scaleX(0) 收起,聚焦时从左侧展开:

.if-line input { border: 0; background: #f3f5fb; }
.if-line .if-underline {
  position: absolute; left: 0; bottom: 0; height: 3px; width: 100%;
  background: linear-gradient(90deg, #6c8cff, #b388ff, #34c7a1);
  transform: scaleX(0); transform-origin: left;
  transition: transform .35s cubic-bezier(.4, 0, .2, 1);
}
.if-line input:focus + .if-underline { transform: scaleX(1); }

辉光描边:聚焦时切换边框色并叠加双层投影:

.if-glow input:focus {
  border-color: #b388ff; outline: none;
  box-shadow: 0 0 0 4px rgba(179,136,255,.18), 0 0 24px rgba(108,140,255,.35);
}
.if-glow input:focus ~ svg { color: #6c8cff; }   /* 左侧图标同步变色 */

参数说明

参数默认值说明
上浮位移top: 12px标签最终停留位置,需避开输入文字区域
上浮缓动cubic-bezier(.34,1.2,.64,1)轻微过冲,上浮更灵动
下划线展开时长.35s200-400ms 最佳,展开方向由 transform-origin 控制
辉光强度box-shadow 双层内圈细、外圈柔,过强会干扰阅读
空态判定:not(:placeholder-shown)占位符必须写一个空格,否则该伪类恒为假

兼容性与性能

常见问题

Q: 浮动标签在 Safari 上不生效? 检查占位符是否为单个空格字符 placeholder=" ";部分旧版 Safari 对空占位符的 :placeholder-shown 判定不稳定,可改用 JS 的 input 事件加 .filled 类兜底。

Q: 标签上浮后和输入内容重叠? 上浮的 top 值要与输入框 padding-top 匹配,比如输入框 padding: 16px 14px 12px 时标签停在 top: 12px 就不会压字。

Q: 辉光太刺眼? 降低外圈投影的透明度与模糊半径,例如 0 0 14px rgba(108,140,255,.2),或把内圈 0 0 0 4px 改成 0 0 0 2px。

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

✍️ 作者与审核