Accordion的蓝色焦点框是.accordion-button:focus的box-shadow与outline叠加效果,需手动覆盖;改--bs-primary无效,因其阴影值为硬编码rgba(),不响应变量变化。

Accordion 里的“蓝色焦点框”不是边框或图标颜色,而是 .accordion-button 聚焦时的 box-shadow 和浏览器原生 outline 叠加效果——它和表单输入框的蓝色高亮同源,但默认没被统一变量控制,必须手动覆盖。
为什么改 --bs-primary 没用?
Bootstrap 5.3+ 的 .accordion-button:focus 使用硬编码的 box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25),这个 rgba() 值是编译时计算的,不响应运行时 CSS 变量变化。改 --bs-primary 只影响按钮背景、链接色等,对焦点阴影无效。
直接覆盖 .accordion-button:focus 最可靠
别绕弯子,定位到具体选择器,一次性清掉所有视觉干扰:
-
.accordion-button:focus必须同时重置outline和box-shadow,否则残留其一都会显蓝边 - 加
!important是必要的——Bootstrap 原生规则权重高,尤其在 CDN 引入场景下 - 若只针对某组 Accordion,用更具体的选择器,比如
.my-accordion .accordion-button:focus
示例代码:
.accordion-button:focus {
outline: none !important;
box-shadow: none !important;
}
想保留焦点反馈但换颜色?
完全去掉会损害键盘可访问性。推荐用 border 或背景色替代:
- 用
border-color替代阴影:确保.accordion-button默认有border: 1px solid transparent,再写.accordion-button:focus { border-color: #28a745; } - 用背景色强化:配合
transition: background-color 0.15s避免突兀,注意展开态(:not(.collapsed))已有背景色,需单独处理 - 深色模式下记得补
@media (prefers-color-scheme: dark)块,否则焦点色在暗背景下可能不可见
真正容易被忽略的是:这个焦点样式只作用于 .accordion-button,不是 .accordion-item 或 .accordion-collapse;且如果用了 data-bs-parent 多层嵌套,外层容器的 overflow: hidden 可能把新设的 border 或 shadow 裁掉——调样式前先打开 DevTools 看 computed 样式里 outline 和 box-shadow 到底 applied 在谁身上。


















