应覆盖CSS变量--bs-form-control-focus-box-shadow或直接重写.form-control:focus的box-shadow,因Bootstrap 5聚焦阴影由box-shadow硬编码实现,非$primary变量动态控制,且验证态需额外处理。
:focus 蓝色阴影由 box-shadow 控制,不是颜色变量直接控制bootstrap 5 默认用 box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25) 实现聚焦高亮,其中 rgba(13, 110, 253, 0.25) 是主色 $primary 的半透版本。它不叫“蓝色阴影颜色”,而是带透明度的阴影叠加效果。
.form-control:focus 等多个选择器里,不是靠单个 CSS 变量开关$primary 变量(改了按钮/链接等也会变)!important 往往绕不开推荐优先用 CSS 自定义属性(CSS custom properties)方式,兼容性好且易维护;若需深度定制或兼容旧版,再用传统类覆盖。
--bs-form-control-focus-box-shadow 变量<head> 或全局样式中加::root { --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.4);}注意:该变量仅影响 .form-control、.form-select 等原生表单控件,对 .btn 无效.form-control:focus,.form-select:focus,.was-validated .form-control:valid:focus,.was-validated .form-select:valid:focus { box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.4) !important;}务必加 !important,否则被 Bootstrap 原始样式权重压制$primary 却没生效?因为 Bootstrap 5 的 SCSS 编译逻辑中,$primary 只用于生成初始调色板和部分组件基础色,而聚焦阴影是通过 box-shadow 函数单独计算的,默认调用 rgba($primary, .25) —— 但这个计算发生在编译时,不是运行时动态读取变量。
bootstrap.min.css,改 SCSS 变量毫无作用$enable-important-utilities: true 或手动重写 form-control.scss 中的 :focus 规则.form-control:focus 元素的 computed box-shadow,看是否被你的样式覆盖Bootstrap 对 .was-validated .form-control:valid:focus 和 :invalid:focus 有独立阴影规则,它们默认用 $success / $danger 色,不受 --bs-form-control-focus-box-shadow 影响。
.was-validated .form-control:valid:focus,.was-validated .form-select:valid:focus { box-shadow: 0 0 0 0.25rem rgba(46, 204, 113, 0.4) !important;}
.was-validated .form-control:valid:focus { box-shadow: none; }
实际项目里,验证态和普通聚焦态的阴影经常被当成一回事处理,结果上线才发现输入正确时阴影变绿、错误时变红——这是最容易被忽略的视觉断层点。