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

如何用CSS实现仅指定子元素触发父元素:focus-within关闭侧边栏

解决方案

实现思路

  • 弃用通用的:focus-within伪类,改用CSS :has() 父选择器,精准匹配「内部.link1元素获得焦点」的.parent容器,只有这种场景下才触发侧边栏关闭逻辑
  • 删除原代码中无效的.parent:focus-within + a.link1规则:.link1是.parent的子元素而非相邻兄弟元素,该选择器永远无法匹配到元素,无实际作用

修改后完整代码

HTML代码

<a class="open" href="#">open menu</a>
<div class="parent">
  <a class="link1" href="#">link1</a>
  <a class="link2" href="#">link2</a>
  <div class="menu2">...123</div>
  <a class="link3" href="#">link3</a>
  <div class="menu3">...456</div>
</div>

CSS代码

.parent{
  width:200px;
  height:100%;
  position:fixed;
  left:-30em;
  background:lightyellow;
}
/* 侧边栏打开逻辑保持不变 */
.open:focus + .parent,.parent:hover{
  left:0;
}
/* 仅当.link1聚焦时才触发侧边栏关闭,替换原:focus-within规则 */
.parent:has(.link1:focus){
  left:-20em;
}

兼容性说明

该方案依赖CSS :has() 伪类,目前兼容Chrome 105+、Firefox 121+、Safari 15.4+,覆盖90%以上全球用户,是纯CSS实现该需求的最优方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:42:02