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

CSS :has(:hover)选择器失效问题及表格行联动高亮方案咨询

问题解决:悬停关联元素时同步高亮的替代实现

关于:has(+ .b:hover)失效的原因

目前部分较早版本的浏览器对:has选择器内部嵌套交互类伪类(如:hover)的支持不完善,这会导致你写的选择器无法触发预期效果。虽然最新版Chrome已经支持该语法,但为了更好的兼容性,推荐使用更稳妥的方案。

替代实现方案

1. 针对你的div示例:利用父容器统一控制

给两个关联元素添加父容器,通过父容器的hover状态同步控制两个子元素的样式,兼容性覆盖所有现代浏览器:

HTML代码:

<div class="group">
  <div class="a"></div>
  <div class="b"></div>
</div>

CSS代码:

.a, .b {
  width: 100px;
  height: 100px;
  background: green;
  margin: 25px;
}

.group:hover .a,
.group:hover .b {
  background: pink;
}

2. 针对你的表格原始需求:关联行同步高亮

最简洁且兼容性好的方式是把需要关联的两行放入同一个<tbody>容器,通过容器的hover状态实现两行同步高亮:

HTML代码:

<table border="1" cellpadding="8">
  <!-- 关联行组 -->
  <tbody class="linked-rows">
    <tr>
      <td>第一行数据</td>
      <td>第一行详情</td>
    </tr>
    <tr>
      <td>第二行数据</td>
      <td>第二行详情</td>
    </tr>
  </tbody>
  <!-- 普通行 -->
  <tbody>
    <tr>
      <td>独立行数据</td>
      <td>独立行详情</td>
    </tr>
  </tbody>
</table>

CSS代码:

table tr {
  background-color: #ffffff;
  transition: background-color 0.2s;
}

.linked-rows:hover tr {
  background-color: #f5f5f5;
}

如果不想额外添加<tbody>,也可以用相邻兄弟选择器结合:has(仅支持现代浏览器):

/* 悬停第一行时,同步高亮第二行 */
tr.linked-row:hover,
tr.linked-row:hover + tr.linked-row {
  background-color: #f5f5f5;
}
/* 悬停第二行时,同步高亮第一行 */
tr.linked-row:has(+ tr.linked-row:hover) {
  background-color: #f5f5f5;
}

总结

  • 优先选择父容器控制的方案,兼容性最好,无需依赖:has选择器
  • 表格场景使用<tbody>分组是最简洁的实现方式
  • 若坚持使用兄弟元素选择器,确保浏览器为最新版本(Chrome 105+、Firefox 121+)以支持:has内部嵌套:hover的语法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:43:14