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

如何对多个相同选择器应用:focus伪类 解决输入框聚焦样式不统一问题

问题原因

CSS 相邻兄弟选择器 + 仅能选中元素后方紧邻的同级节点,无法匹配位于元素前方的同级节点,因此你原有的 .form-control:focus + span 规则只能命中 input 右侧的 Kg 标签,左侧的 Peso 标签位于 input 之前,自然不会被该规则匹配。

解决方案

方案1:使用 CSS :has() 选择器(推荐,主流浏览器均已支持)

直接通过父容器判断内部 input 是否聚焦,选中所有子级标签元素,修改你的 CSS 规则即可:

/* 原有input聚焦样式保留 */
.form-control:focus {
    color: #00a1ff;
    background-color: #fff0;
    border-color: #00a1ff !important;
    outline: 0;
    box-shadow: none !important;
    border-width: 0px 0px 2px 0px !important;
}
/* 新增父容器判断规则,匹配所有前后标签 */
.input-group:has(.form-control:focus) .input-group-text {
    color: #00a1ff;
    border-color: #00a1ff !important;
    border-width: 0px 0px 2px 0px !important;
}

方案2:JS 兼容方案(适配不支持 :has() 的旧浏览器)

先添加一段监听脚本:

const numInput = document.querySelector('input.form-control[type="number"]');
const groupWrap = numInput.closest('.input-group');
// 聚焦时给父容器加标记类
numInput.addEventListener('focus', () => groupWrap.classList.add('focus-active'));
// 失焦时移除标记类
numInput.addEventListener('blur', () => groupWrap.classList.remove('focus-active'));

再添加对应的 CSS 规则:

.input-group.focus-active .input-group-text {
    color: #00a1ff;
    border-color: #00a1ff !important;
    border-width: 0px 0px 2px 0px !important;
}

两种方案都可以实现 input 聚焦时,左右两侧的标签同步修改下边框颜色的效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:09:01