【问题标题】:CSS hover on a table row with the exception of some cellsCSS 悬停在表格行上,但某些单元格除外
【发布时间】:2020-08-28 20:32:53
【问题描述】:

根据我之前的post,我想添加一个仅包含图像的第 4 列。悬停不应影响此列。由于图像较小,然后单元格本身,悬停看起来很奇怪。我发现了类似here 的东西,但是为了让它工作,我必须用一个类属性标记每个<td>,除了每行的第四个<td>。但是下面代码中的表具有不同的结构:只有具有特殊含义的列具有类属性。在这种情况下,每行的第 4 个<td> 具有rightTD 类。

我对 CSS 做了以下修改:

.multidata tbody>tr:hover td:not(.rightTD) { background-color: #96c7ef!important; }

(已添加:not(.rightTD)

HTML 扩展了一个新的标头:

<th style="width: 10%">Button</th>

且两个单元格内容相同:

<td class="rightTD" align="center"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAIcApgBpEx4v0wAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9sMBw0pJeuQSwsAAAEJSURBVDjL3ZQ9TsNAEIU/I18k93CHUOSGSCA3VhqofIK0EW1OEFFBgyKlIaJI4YYi9+AgeN5QmEX5E94oLhDTrXbmzZv3Zhf+eiRdCfN6wnqzBCDPCqqr2a/5aURTP4VEJ+B6s+S+rDCJ58VjZ/eLGF0kx82jNIwZGTMhKQowiqHLcZ3IcF5PADw4uh3NZ4O+AUfTwQ5ynhUASXA/3RYf4K6skITMkQlr9HO+HY5pGmEmXEJy9gmkh+MJNyG1ZgQwlzC1TQLYMV3TPeo8HVmNm+EYSbzWLwd3oW7FLO6ljKYDv74scRNv7wtWDx/J+S73vTZBx/4WW60pvQDmWbHz2wTxz2GY8K/iC8BCorjCvk26AAAAAElFTkSuQmCC"/></td>

问题:第 4 列(标题除外)仍然受悬停影响。

如何禁用第 4 列的悬停?

下面是代码:

.multidata td,.multidata th {
    border: 2px solid #808080;
    padding: 5px 5px;
}

.multidata tbody>tr:hover {
    background-color:#96c7ef!important;
}

.multidata  tbody>tr:hover td:not(.rightTD) {
    background-color:#96c7ef!important;
}

.tdX {
    background-color:red;
    font-weight:bold;
}

.tdY {
    background-color:green;
    font-weight:bold;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="pragma" content="no-cache">
    <link rel="stylesheet" href="./basic.css" type="text/css">
</head>

<body>
<table class="multidata" style="table-layout: fixed; width: 100%" cellspacing="0" border="0">
    <thead>
        <tr class="change_on_hover">
            <th style="width: 10%">ID</th>
            <th style="width: 10%">Name</th>
            <th style="width: 10%">Status</th>
            <th style="width: 10%">Button</th>
        </tr>
    </thead>

    <tr class="change_on_hover">
        <td class="td1" style="color:grey"><i>1</i></td>
        <td class="td1" style="color:grey"><i>First</i></td>
        <td class="tdX" align="center"><b>Disabled</b></td>
        <td class="rightTD" align="center"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAIcApgBpEx4v0wAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9sMBw0pJeuQSwsAAAEJSURBVDjL3ZQ9TsNAEIU/I18k93CHUOSGSCA3VhqofIK0EW1OEFFBgyKlIaJI4YYi9+AgeN5QmEX5E94oLhDTrXbmzZv3Zhf+eiRdCfN6wnqzBCDPCqqr2a/5aURTP4VEJ+B6s+S+rDCJ58VjZ/eLGF0kx82jNIwZGTMhKQowiqHLcZ3IcF5PADw4uh3NZ4O+AUfTwQ5ynhUASXA/3RYf4K6skITMkQlr9HO+HY5pGmEmXEJy9gmkh+MJNyG1ZgQwlzC1TQLYMV3TPeo8HVmNm+EYSbzWLwd3oW7FLO6ljKYDv74scRNv7wtWDx/J+S73vTZBx/4WW60pvQDmWbHz2wTxz2GY8K/iC8BCorjCvk26AAAAAElFTkSuQmCC"/></td>
    </tr>

    <tr class="change_on_hover">
        <td class="td2" style="color:grey"><i>2</i></td>
        <td class="td2" style="color:grey"><i>Second</i></td>
        <td class="tdY" align="center"><b>Active</b></td>
        <td class="rightTD" align="center"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAIcApgBpEx4v0wAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9sMBw0pJeuQSwsAAAEJSURBVDjL3ZQ9TsNAEIU/I18k93CHUOSGSCA3VhqofIK0EW1OEFFBgyKlIaJI4YYi9+AgeN5QmEX5E94oLhDTrXbmzZv3Zhf+eiRdCfN6wnqzBCDPCqqr2a/5aURTP4VEJ+B6s+S+rDCJ58VjZ/eLGF0kx82jNIwZGTMhKQowiqHLcZ3IcF5PADw4uh3NZ4O+AUfTwQ5ynhUASXA/3RYf4K6skITMkQlr9HO+HY5pGmEmXEJy9gmkh+MJNyG1ZgQwlzC1TQLYMV3TPeo8HVmNm+EYSbzWLwd3oW7FLO6ljKYDv74scRNv7wtWDx/J+S73vTZBx/4WW60pvQDmWbHz2wTxz2GY8K/iC8BCorjCvk26AAAAAElFTkSuQmCC"/></td>
    </tr>
</table>
</body>
</html>

【问题讨论】:

    标签: html css hover


    【解决方案1】:

    最好不要在 css 中尽可能使用!important,之后覆盖它会成为一个挑战。而不是在&lt;TR&gt; 上应用悬停,而是将其移至&lt;TD&gt;,并使用:last-of-type 选择器来保持第四个&lt;TD&gt; 背景透明。

    .multidata td,
    .multidata th {
      border: 2px solid #808080;
      padding: 5px 5px;
    }
    
    .multidata tbody>tr:hover td {
      background-color: #96c7ef;
    }
    
    .multidata tbody>tr:hover td:last-of-type {
      background-color: rgba(0, 0, 0, 0);
    }
    
    .tdX {
      background-color: red;
      font-weight: bold;
    }
    
    .tdY {
      background-color: green;
      font-weight: bold;
    }
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    
    <head>
      <meta http-equiv="cache-control" content="no-cache">
      <meta http-equiv="expires" content="0">
      <meta http-equiv="pragma" content="no-cache">
      <link rel="stylesheet" href="./basic.css" type="text/css">
    </head>
    
    <body>
      <table class="multidata" style="table-layout: fixed; width: 100%" cellspacing="0" border="0">
        <thead>
          <tr class="change_on_hover">
            <th style="width: 10%">ID</th>
            <th style="width: 10%">Name</th>
            <th style="width: 10%">Status</th>
            <th style="width: 10%">Button</th>
          </tr>
        </thead>
    
        <tr class="change_on_hover">
          <td class="td1" style="color:grey"><i>1</i></td>
          <td class="td1" style="color:grey"><i>First</i></td>
          <td class="tdX" align="center"><b>Disabled</b></td>
          <td class="rightTD" align="center"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAIcApgBpEx4v0wAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9sMBw0pJeuQSwsAAAEJSURBVDjL3ZQ9TsNAEIU/I18k93CHUOSGSCA3VhqofIK0EW1OEFFBgyKlIaJI4YYi9+AgeN5QmEX5E94oLhDTrXbmzZv3Zhf+eiRdCfN6wnqzBCDPCqqr2a/5aURTP4VEJ+B6s+S+rDCJ58VjZ/eLGF0kx82jNIwZGTMhKQowiqHLcZ3IcF5PADw4uh3NZ4O+AUfTwQ5ynhUASXA/3RYf4K6skITMkQlr9HO+HY5pGmEmXEJy9gmkh+MJNyG1ZgQwlzC1TQLYMV3TPeo8HVmNm+EYSbzWLwd3oW7FLO6ljKYDv74scRNv7wtWDx/J+S73vTZBx/4WW60pvQDmWbHz2wTxz2GY8K/iC8BCorjCvk26AAAAAElFTkSuQmCC"
            /></td>
        </tr>
    
        <tr class="change_on_hover">
          <td class="td2" style="color:grey"><i>2</i></td>
          <td class="td2" style="color:grey"><i>Second</i></td>
          <td class="tdY" align="center"><b>Active</b></td>
          <td class="rightTD" align="center"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAIcApgBpEx4v0wAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9sMBw0pJeuQSwsAAAEJSURBVDjL3ZQ9TsNAEIU/I18k93CHUOSGSCA3VhqofIK0EW1OEFFBgyKlIaJI4YYi9+AgeN5QmEX5E94oLhDTrXbmzZv3Zhf+eiRdCfN6wnqzBCDPCqqr2a/5aURTP4VEJ+B6s+S+rDCJ58VjZ/eLGF0kx82jNIwZGTMhKQowiqHLcZ3IcF5PADw4uh3NZ4O+AUfTwQ5ynhUASXA/3RYf4K6skITMkQlr9HO+HY5pGmEmXEJy9gmkh+MJNyG1ZgQwlzC1TQLYMV3TPeo8HVmNm+EYSbzWLwd3oW7FLO6ljKYDv74scRNv7wtWDx/J+S73vTZBx/4WW60pvQDmWbHz2wTxz2GY8K/iC8BCorjCvk26AAAAAElFTkSuQmCC"
            /></td>
        </tr>
      </table>
    </body>
    
    </html>

    【讨论】:

    • 谢谢,帮了大忙。 !important 是对的,但在我的情况下,HTML 是在服务器端呈现的,如果某些条件为真,则将内联样式(背景颜色或字体设置)添加到 。我使用 !important 来“覆盖”这些规则。我使用“td.rightTD”而不是“td:last-of-type”,因为如果最后一列没有这个类属性,那么这个 CSS 规则也不应该适用。但无论如何谢谢你的提示:-)
    • 我对规则有疑问:“.multidata tbody>tr:hover td {background-color:green}”。这是否意味着,您通过设置当前 的每个 的颜色来应用悬停在 上?为什么我们不能只写:“.multidata tbody>tr td:hover {background-color:green}”?实际上,我们必须选择当前 的每个 并为所有它们应用样式,对吗?
    • 1) 你是对的。当悬停在表格行上时,将背景颜色应用于其中的所有列。 2)该css规则是说一次只在一列上应用悬停。 3) 没错,为所有列设置样式,但针对特定情况进行更改。我希望这是有道理的。
    【解决方案2】:
    .multidata tbody>tr:hover td:not(:last-child) {
        background-color:#96c7ef!important;
    }
    

    【讨论】:

    • 最好为您的代码添加一些解释
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签