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

仅用CSS实现:.entry:focus-visible时修改#target:invalid状态边框

问题解答

仅靠纯CSS无法直接实现你想要的效果,核心原因是CSS选择器只能选择当前元素的后代、后续兄弟元素,无法反向选中前置的兄弟元素——你的HTML结构中#target在.entry之前,当.entry触发:focus-visible状态时,CSS没有语法能向前选中前面的#target。

你用CSS变量失败的原因

CSS变量的作用域是向下传递的:你在.entry:focus-visible中定义的--blah,只能影响.entry本身及其内部的后代元素,无法向上传递到:root,也不能向前作用于位置更靠前的#target。因此#target:invalid始终读取的是:root中定义的初始--blah值,不会随.entry的状态变化而更新。

纯CSS可行的前提:调整HTML结构

如果能调整元素的顺序,把.entry放在#target之前,就可以用通用兄弟选择器实现需求:

修改后的HTML

<p><input class='entry'></p>
<p><input class='entry'></p>
<p><input id='target' required></p>

对应的CSS

input {
  outline: none;
  border: 1px solid #555;
  border-radius: 3px;
}

input:focus-visible {
  outline: none;
  border: 1px solid #28f;
  border-radius: 3px;
}

/* 当任意.entry处于:focus-visible,且#target处于:invalid状态时,修改边框 */
.entry:focus-visible ~ #target:invalid {
  border-color: red;
}

无法调整HTML结构的情况

如果不能修改HTML元素的顺序,那么必须借助JavaScript来监听.entry的聚焦状态,动态切换#target的样式,纯CSS无法完成这种反向状态关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:37:07