代码之家  ›  专栏  ›  技术社区  ›  MacGenius

CSS如何将表中的两行高亮显示为悬停的一行?

  •  1
  • MacGenius  · 技术社区  · 6 年前

    我的问题是,我想突出显示我当前悬停的行下面的表行。

    然而,我面临的问题是,在两行之后,它应该高亮显示下两行。基本上,表的每两行高亮显示为一行。

    当前,在悬停时,它只高亮显示鼠标所在的行。 使用CSS可以实现这样的功能吗?或者我忽略了一些显而易见的事情。

    table tr:nth-child(4n+4) {
      background-color: #EBEBEB;
    }
    #table tr:nth-child(4n+5) {
      background-color: #EBEBEB;
    }
    #table tr:hover {
      background: #3498DB;
    }
    

    请看我的作品: http://jsfiddle.net/g5o7v6qe/21/

    5 回复  |  直到 6 年前
        1
  •  4
  •   MacGenius    6 年前

    遗憾的是,单靠CSS是不可能实现您要搜索的解决方案的,因为CSS不提供选择器来选择前面的子级(当您将鼠标悬停在描述上时,还需要突出显示上面的行)。相反,您可以稍微修改一下HTML以实现这一点:

    tbody 元素!

    表格主体 元素可以与 thead tfoot 例如,在锁定表的页眉和页脚的同时启用滚动。另外,打印时,如果表格跨越多个页面,页眉和页脚可能会在下一页重复。检查 this question

    很多人不知道的是,你可以有多个 表格主体 单个表中的元素。这意味着您可以将表中的每组行包装为 元素,然后对每个元素进行适当的样式设置:

    #table {
      border-radius: 10px;
      border-collapse: collapse;
      width: auto;
    }
    
    #table td,
    #table th {
      border: 1px solid #DDDDDD;
      padding: 8px;
    }
    
    #table th {
      padding-top: 12px;
      padding-bottom: 12px;
      text-align: center;
      background-color: #333333;
      color: white;
    }
    
    #table tbody:nth-child(2n+3) {
      background-color: #EBEBEB;
    }
    
    /* Group highlights */
    #table tbody:hover {
      background: #3498D8;
    }
    <table align="center" id="table">
      <thead>
        <tr>
          <th>Vendor</th>
          <th>Model</th>
          <th>Year</th>
          <th>Source</th>
        </tr>
      </thead>
    
      <tbody>
        <tr>
          <td>vendor1</td>
          <td>model1</td>
          <td>year1</td>
          <td>source1</td>
        </tr>
        
        <tr>
          <td colspan="4">description1</td>
        </tr>
      </tbody>
    
      <tbody>
        <tr>
          <td>vendor2</td>
          <td>model2</td>
          <td>year2</td>
          <td>source2</td>
        </tr>
        
        <tr>
          <td colspan="4">description2</td>
        </tr>
      </tbody>
    
      <tbody>
        <tr>
          <td>vendor3</td>
          <td>model3</td>
          <td>year3</td>
          <td>source3</td>
        </tr>
        
        <tr>
          <td colspan="4">description3</td>
        </tr>
      </tbody>
    
      <tbody>
        <tr>
          <td>vendor4</td>
          <td>model4</td>
          <td>year4</td>
          <td>source4</td>
        </tr>
        
        <tr>
          <td colspan="4">description4</td>
        </tr>
      </tbody>
    </table>

    注意:当你这样做的时候,你可能还想把你的表头嵌套在一个 元素,以保持一致性。

        2
  •  1
  •   janDo    6 年前

    所以据我所知,你希望这样: jsfiddle

    #table tr:nth-child(2n+2):hover {
      background: #3498DB;
    }
    
    #table tr:nth-child(2n+2):hover + tr {
      background: #3498DB;
    }
    

    nth-child(2n+2) 悬停时每2行高亮显示一次。

    + tr 你都做到了 tr 是悬停的 tr公司 突出显示。

    希望你能理解。

        3
  •  0
  •   Chaska    6 年前

    这就是你想要达到的目标吗?

    我还修改了错误的html标记和css。

    #table {
      border-radius: 10px;
      border-collapse: collapse;
      width: auto;
    }
    
    #table td,
    #table th {
      border: 1px solid #DDDDDD;
      padding: 8px;
    }
    
    #table tr:nth-child(4n+3) {
      background-color: #EBEBEB;
    }
    
    #table tr:nth-child(4n+4) {
      background-color: #EBEBEB;
    }
    
    #table tr:hover td,
    #table tr:nth-child(2n+1):hover td,
    #table tr:nth-child(2n+1):hover + tr td {
      background: #3498DB;
    }
    
    #table th {
      padding-top: 12px;
      padding-bottom: 12px;
      text-align: center;
      background-color: #333333;
      color: white;
    }
    <table align="center" id="table">
      <thead>
        <tr>
          <th>Vendor</th>
          <th>Model</th>
          <th>Year</th>
          <th>Source</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>vendor1</td>
          <td>model1</td>
          <td>year1</td>
          <td>source1</td>
        </tr>
        <tr>
          <td colspan="4">description1</td>
        </tr>
        <tr>
          <td>vendor2</td>
          <td>model2</td>
          <td>year2</td>
          <td>source2</td>
        </tr>
        <tr>
          <td colspan="4">description2</td>
        </tr>
        <tr>
          <td>vendor3</td>
          <td>model3</td>
          <td>year3</td>
          <td>source3</td>
        </tr>
        <tr>
          <td colspan="4">description3</td>
        </tr>
        <tr>
          <td>vendor4</td>
          <td>model4</td>
          <td>year4</td>
          <td>source4</td>
        </tr>
        <tr>
          <td colspan="4">description4</td>
        </tr>
      </tbody>
    </table>
        4
  •  0
  •   Dipak    6 年前

    下面是当我们在特定行上悬停时高亮显示表中下两行的代码。

    td, th {
      padding: 10px;
    }
    tr.head-row {
      background: grey;
    }
    tr:not(.head-row) {
      background: #fff5f5;
    }
    
    
    /* highlight the current row on hover*/
    tr:hover:not(.head-row) {
        background: #f8b5b5;
    }
    
    /* highlight next row on hovering a row */
    tr:hover:not(.head-row) + tr {
        background: #91cefe;
    }
    
    /* highlight next to next row on hovering a row */
    tr:hover:not(.head-row) + tr + tr {
        background: #67ace1;
    }
    <table style="width:100%" id="table">
      <tr class="head-row">
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Age</th>
      </tr>
      <tr>
        <td>Jill</td>
        <td>Smith</td>
        <td>50</td>
      </tr>
      <tr>
        <td>Eve</td>
        <td>Jackson</td>
        <td>94</td>
      </tr>
      <tr>
        <td>Eveas</td>
        <td>Jackson we</td>
        <td>94</td>
      </tr>
      <tr>
        <td>Everrr</td>
        <td>Jackson</td>
        <td>94</td>
      </tr>
      <tr>
        <td>Eve ff</td>
        <td>Jackson</td>
        <td>94</td>
      </tr>
      <tr>
        <td>Eve</td>
        <td>Jackson</td>
        <td>94</td>
      </tr>
      <tr>
        <td>Eveas</td>
        <td>Jackson we</td>
        <td>94</td>
      </tr>
      <tr>
        <td>Everrr</td>
        <td>Jackson</td>
        <td>94</td>
      </tr>
      <tr>
        <td>Eve ff</td>
        <td>Jackson</td>
        <td>94</td>
      </tr>
    </table>
        5
  •  0
  •   Persijn    6 年前

    下面是我如何在JS中解决它:

    $(function() {
      //Selected all rows with a data-group attribute
      let rows = $("tr[data-group]");
      //on hover over 
      rows.hover(function over() {
        let group = $(this).data("group");
        $(this).addClass("highlight");
        $(this).siblings("tr[data-group=" + group + "]").addClass("highlight");
        //on hover out
      }, function out() {
        let group = $(this).data("group");
        $(this).removeClass("highlight");
        $(this).siblings("tr[data-group=" + group + "]").removeClass("highlight");
      });
    });
    table {
      border: 1px solid black;
    }
    
    td {
      padding: 0.5em 1em;
      border: 2px solid blue;
    }
    
    .highlight {
      background-color: cornflowerblue;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
      <tr data-group="1">
        <td>element1</td>
        <td>element2</td>
      </tr>
      <tr data-group="1">
        <td colspan="2">Long element</td>
      </tr>
      <tr data-group="2">
        <td>element1</td>
        <td>element2</td>
      </tr>
      <tr data-group="2">
        <td colspan="2">Long element</td>
      </tr>
      <tr data-group="3">
        <td>element1</td>
        <td>element2</td>
      </tr>
      <tr data-group="3">
        <td colspan="2">Long element</td>
      </tr>
      <tr data-group="4">
        <td>element1</td>
        <td>element2</td>
      </tr>
      <tr data-group="4">
        <td colspan="2">Long element</td>
      </tr>
    </table>