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

能否仅用CSS实现HTML表格同class行的联动悬停高亮?

纯CSS实现多表格同class行同步悬停效果

问题描述

现有两个HTML表格,行使用相同的class名称,当前CSS仅能实现单个行悬停时自身背景变红,想仅用CSS(不借助JavaScript)实现:鼠标悬停某一行时,两个表格里所有同class的行同时改变背景色。

原HTML结构:

<div class="tables">
  <table>
    <tr class="row-1">
      <td>row 1, col 1</td>
      <td>row 1, col 2</td>
    </tr>
    <tr class="row-2">
      <td>row 2, col 1</td>
      <td>row 2, col 2</td>
    </tr>
  </table>
  <table>
    <tr class="row-1">
      <td>row 1, col 1</td>
      <td>row 1, col 2</td>
    </tr>
    <tr class="row-2">
      <td>row 2, col 1</td>
      <td>row 2, col 2</td>
    </tr>
  </table>
</div>

原CSS代码:

.tables {
  display: flex;
}

table {
  margin: 10px;
}

table, tr, td {
  border: 1px solid black;
}

tr[class^="row-"]:hover {
  background-color: red;
}

解决方案

可以实现,借助CSS的:has()伪类就能达成需求,无需JavaScript。

修改后的完整CSS代码:

.tables {
  display: flex;
}

table {
  margin: 10px;
}

table, tr, td {
  border: 1px solid black;
}

/* 核心逻辑:匹配容器内同class的悬停行,同步变色 */
.tables:has(tr.row-1:hover) tr.row-1,
.tables:has(tr.row-2:hover) tr.row-2 {
  background-color: red;
}

逻辑说明

  • .tables:has(tr.row-1:hover) 会检测.tables容器内是否有row-1类的行被鼠标悬停
  • 一旦检测到该状态,就给容器内所有row-1类的行设置红色背景
  • 同理,row-2类的行遵循相同规则,不管悬停左边还是右边表格的某一行,两个表格里同class的行都会同步变色

兼容性提示

:has()伪类目前已被Chrome、Firefox(121版本及以上)、Safari等主流浏览器支持,若需兼容老旧浏览器可能需要其他方案,但现代浏览器环境下完全可用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:30:57