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

Posted

技术标签:

【中文标题】使用 CSS 突出显示悬停时的两个表格行【英文标题】:Highlight two table rows on hover with CSS 【发布时间】:2012-02-04 11:50:08 【问题描述】:

在鼠标悬停时更改表格中一行的背景颜色非常简单,使用 CSS:

.HighlightableRow:hover

  background-color: lightgray;

还有一些 html

<table>
  <tr class=HighlightableRow>
    <td>Cell 1</td>
    <td>Cell 2</td>
    <td>Cell 3</td>
  <tr>
  <tr class=HighlightableRow>
    <td>Cell 1</td>
    <td>Cell 2</td>
    <td>Cell 3</td>
  <tr>
</table>

有时,当我将鼠标悬停在其中任何一行上时,我想突出显示一对行。例如,当在表格中显示工作订单列表时,我会有一行包含创建者、创建日期、紧迫性等,而第二行将包含所请求工作的例外。

除了使用 javascript onmouseover/onmouseout 事件处理程序之外,还有什么方法可以创建如上所示的这种效果?最好使用 CSS。

【问题讨论】:

【参考方案1】:

使用 tbody 元素对行进行分组。

tbody:hover  background:#eee;

HTML:

<table>
  <tbody>
    <tr>
      <td>Hello</td>
      <td>World!</td>
    </tr>
    <tr>
      <td>Hello</td>
      <td>World!</td>
    </tr>
  </tbody>
</table>

查看有关“tbody”、“thead”和“tfoot”的详细信息以了解正确用法。

【讨论】:

这会突出显示所有行,而不仅仅是两行。 一张表中可以有多个 tbody。如果每个 tbody 中恰好有两行,那么他的解决方案将起作用。见:***.com/questions/3076708/…【参考方案2】:

如果您满足于突出显示下一行,这实际上非常简单。

tr:hover, tr:hover + tr 
background:#eee; 

css + 选择器仅选择紧随其后的元素,如果它与您的类型匹配。所以在这种情况下,它会突出显示当前行以及下一行。

见jsFiddle

当然,如果您想将两个分组,则有限制,因为您不能执行“这一行和上一行”。在这种情况下,我可能会将这两行嵌套在第一行内的新表中。有意义吗?

编辑:像这样

HTML

<table>
     <tr>
       <td>

         <table>

           <tr>
             <td>Hello</td>
             <td>World!</td>
           </tr>

           <tr>
             <td>Hello</td>
             <td>World!</td>
           </tr>

         </table>

       </td>
     </tr>
   </table>

CSS

tr:hover tr  background:#eee; 

工作fiddle

【讨论】:

您能否使用第一行的 + 选择器突出显示第二行,使用第二行的 - 选择器突出显示第一行?这几乎模仿了我现在使用 JavaScript 所做的事情。 很遗憾,没有。它只有一种方式,因为 CSS 无法选择前一个元素。但是您可以在 tr 中放置一个新表,并突出显示它。看看我更新的小提琴:jsfiddle.net/6TYBb/1 @Martin 否。由于 CSS 的工作方式,您不能选择上一个或父元素。这可能看起来很愚蠢,但从性能 POV 来看,这很有意义。 Johnathan Snook 写了一篇关于它的优秀文章:snook.ca/archives/html_and_css/css-parent-selectors 在不诉诸 JavaScript 暴力的情况下,唯一明智的做法是嵌套,正如我在上面的 Fiddle 中说明的那样。当您将鼠标悬停在底部两行中的任何一行时,它们都会突出显示,因为 :hover 定位在父元素本身上。我希望这是有道理的。 遗憾的是,这不允许分组,并且在 tr 内添加表格会导致列对齐。【参考方案3】:

我不知道有一种方法可以使一个对象上的事件与 vanilla CSS 中的另一个对象进行交互。通常,当您想要连接此类自定义事件时,您会使用某种实际的逻辑编程语言(在本例中为 javascript)。

现在,如果你决定走那条路,我可以用一些非常简单的 jQuery 帮助你完成你所需要的 :)。 jQuery 的事件绑定模型实际上消除了 javascript 的很多痛苦。

【讨论】:

感谢您的回答。我其实很喜欢 JavaScript 的痛苦,但如果我改变看法,我会提出一个新问题。

以上是关于使用 CSS 突出显示悬停时的两个表格行的主要内容,如果未能解决你的问题,请参考以下文章

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

选择表格行并使用 Twitter Bootstrap 保持突出显示

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

如何使用 jquery ui 可拖动突出显示悬停时的可放置​​区域

jQuery 突出显示表格行

如何突出显示和检测 CSS 网格行上的鼠标点击?