H5中实现表单输入框焦点边框与阴影平滑过渡,需在默认状态用transition声明border-color和box-shadow等属性,再于:focus中设置对应样式,并注意iOS兼容性及可访问性细节。

在 H5(HTML5)中,为表单输入框(如 <input>、<textarea>)在获取焦点时实现边框颜色与阴影的平滑过渡,核心是使用 CSS 的 transition 属性,并配合 :focus 伪类控制样式变化。
给 input 添加 transition 声明
必须显式为需要过渡的 CSS 属性设置 transition,否则即使 :focus 改变了 border-color 或 box-shadow,也不会有动画效果。
- 推荐写法:对多个属性分别指定过渡,例如
transition: border-color 0.2s ease, box-shadow 0.2s ease; - 也可简写为
transition: all 0.2s ease;,但不建议用于生产环境——它会过渡所有可变属性(如 width、opacity 等),可能引发意外行为 - 确保 transition 写在默认状态(非 :focus)的选择器中,这样失去焦点时也能反向过渡
用 :focus 设置焦点时的边框和阴影
在 :focus 中修改 border-color 和 box-shadow 即可触发已声明的过渡效果。
- 边框颜色建议使用 solid 类型,例如
border: 2px solid #007bff;,避免从none切换导致宽度跳变 - 阴影推荐用
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);这类“外发光”形式,视觉更清晰且不影响布局 - 注意:若 input 原本无边框(
border: none),直接改border-color不生效,需同时设border-style和border-width
兼容性与移动端注意事项
部分 iOS Safari 对 :focus 触发较保守(比如点击文本域才触发,纯点击按钮不触发),需额外处理。
- 确保 input 有
tabindex="0"(非必需,但有助于键盘导航场景) - 移动端可加
outline: none;配合自定义边框,避免双轮廓;但要保留可访问性,建议用outline-offset或确保焦点样式足够明显 - 如果用
appearance: none;重置原生样式,记得手动补全 focus 状态下的所有视觉反馈
只要 transition 声明正确、属性可过渡、:focus 样式有效,就能实现自然流畅的焦点过渡效果。不复杂但容易忽略细节。


















