You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS自定义:focus样式后点击按钮焦点残留,如何恢复默认行为?

解决方案

不需要编写JavaScript代码,使用原生CSS的:focus-visible伪类即可实现预期效果,交互逻辑和浏览器原生默认焦点行为完全一致。

问题根源

你之前为:focus伪类定义的样式会命中所有场景下的焦点状态:无论焦点是鼠标点击元素触发,还是用户按TAB键通过键盘导航触发,都会应用你写的阴影样式。点击按钮后焦点默认会停留在当前交互元素上,因此样式会持续显示,直到你点击空白处把焦点转移走。

修复后的代码

将原有选择器中的:focus替换为:focus-visible即可:

*:focus-visible {
  outline: none;
  box-shadow: 0 0 0 0.5rem rgba(61, 112, 46, 0.5);
}

.cta *:focus-visible {
  box-shadow: 0 0 0 0.5rem rgba(255, 255, 255, 0.5);
}

效果说明

  • 仅当用户通过键盘(TAB、方向键等)切换焦点时,才会显示自定义的焦点样式
  • 鼠标点击按钮、链接等交互元素触发的焦点,不会显示该样式,不会出现点击后样式残留的问题
  • 判断逻辑和浏览器原生焦点轮廓显示规则完全对齐,不会破坏网页无障碍访问能力,键盘用户可以正常识别当前焦点位置
  • 所有主流现代浏览器均原生支持该伪类,无需额外引入第三方脚本或自行编写交互逻辑

注意:禁止全局为:focus设置outline: none,该操作会导致键盘导航用户无法定位当前焦点位置,存在严重的无障碍缺陷。

内容的提问来源于stack exchange,提问作者Rishikesh Negi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:18:34