突出显示 HTML 表格中悬停行中没有行跨度的单元格

Posted

技术标签:

【中文标题】突出显示 HTML 表格中悬停行中没有行跨度的单元格【英文标题】:Highlight cells in hovered row in HTML table which have no rowspan 【发布时间】:2013-06-13 12:27:20 【问题描述】:

这里有个有趣的问题:

有一张表格,里面有几个单元格,其中一些有行跨度:

+----+----+----+----+
|    |    | c4 | cx |
|    | c2 +----+----+
|    |    | c5 | cx |
| c1 +----+----+----+
|    |    | c6 | cx |
|    | c3 +----+----+
|    |    | c7 | cx |
+----+----+---------+

使用以下 CSS,我只想在悬停该行时突出显示单元格 c4、c5、c6、c7 和相应的 cx 单元格:

tr:hover td:not([rowspan]) 
    background: #F1F1F1;

当 c4 .. c7 悬停时就像一个魅力 - 只有单元格本身及其对应的 cx 单元格获得新的背景颜色。

当 c1 到 c3 悬停时,行 c4 也悬停 - 考虑到选择器非常有意义。问题是我不希望它以这种方式运行并且不知道如何阻止它。

有什么想法吗?如果需要,我会提供小提琴。

【问题讨论】:

悬停c2 时应突出显示哪些单元格?对于c1? 在这两种情况下,都不应突出显示任何单元格 始终提供标记。用手把这些都写出来很痛苦。 @cimmanon 你说得对,我会用小提琴传递标记 【参考方案1】:

您无法创建一个选择器来执行此操作,但您可以添加另一个选择器来覆盖突出显示的背景:

<!DOCTYPE html>
<style>
  tr:hover td:not([rowspan]) background: red
  tr:hover td[rowspan]:hover ~ td background: none;
</style>
<table>
  <tr><td rowspan=2>c1</td><td>cx</td><td>cx</td></tr>
  <tr><td>cx</td><td>cx</td></tr>
</table>

td:hover ~ td 表示悬停的&lt;td&gt; 之后的任何&lt;td&gt;(具有相同的父级)。

【讨论】:

我刚刚将您的第一行 CSS 与 :not 一起使用,它运行良好,所以 +1。但是,我正在使用 Chrome。 IE8 和更早版本不支持 :not 选择器 w3schools。 @Airn5475 你说的是正确的,但一般来说请避免使用 w3schools - 他们是not affiliated with W3C and have low quality material。使用W3C-endorsed WebPlatform.org 或Mozilla's MDN。【参考方案2】:

我建议一种方法:

$('td').not('[rowspan]')
.hover(function () 
    $(this)
    .siblings()
    .andSelf()
    .not('[rowspan]').addClass('highlight');
, function()
    $(this)
    .parent()
    .find('.highlight')
    .removeClass('highlight');
);

JS Fiddle demo.

参考资料:

addClass()andSelf()hover()not()parent()removeClass()siblings()

【讨论】:

感谢您的 sn-p。不幸的是,我忘了提到我搜索了仅 CSS 的解决方案。无论如何,+1 @Joshua:抱歉,我应该看到没有 jQuery,甚至没有 javascript 标签。不过,出于某种原因,我确信有人在那里。

以上是关于突出显示 HTML 表格中悬停行中没有行跨度的单元格的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSS 突出显示悬停时的两个表格行

悬停时突出显示整个表格行

具有 Rowspan 悬停和斑马效果的表格

涉及行跨度时,根据内容自动调整 HTML 表格单元格的高度

悬停在其行上时如何更改特定表格单元格的颜色? [关闭]

如何在 CSS Grid 中突出显示行中的所有单元格(显示:网格)