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

如何用纯CSS为最后一个.active类<tr>下的<td>设置样式?

纯CSS实现为最后一个带.active类的内设置样式

你需要给动态序列表格里最后一个带.active类的<tr>内的<td>加样式,用:last-of-type没效果,又没法用nth-child这类依赖固定位置的选择器,下面是可行的纯CSS方案:

原代码问题分析

先看你原来的代码,:last-of-type是按元素类型匹配最后一个元素,不是按类。所以tr.row.active:last-of-type只会选中既是最后一个<tr>又带.active的元素,这显然不符合你的需求——毕竟最后一个<tr>可能不带.active。

原代码示例

CSS

tr.row td {
  border: 1px solid black;
  padding: 5px 12px;
}

tr.row.active:last-of-type td {
  background: blue;
}

HTML

<table>
  <tbody>
    <tr class="row">
      <td>1st</td>
      <td>Row</td>
    </tr>
    <tr class="row active">
      <td>2nd</td>
      <td>Row</td>
    </tr>
    <tr class="row active">
      <td>3rd</td>
      <td>Row</td>
    </tr>
    <tr class="row active">
      <td>4th</td>
      <td>Row</td>
    </tr>
    <tr class="row">
      <td>5th</td>
      <td>Row</td>
    </tr>
  </tbody>
</table>

解决方案:相邻兄弟选择器反向排除

思路很简单:先给所有.active的<tr>里的<td>加上目标样式,再把那些后面紧跟着另一个.active兄弟的.active元素的<td>样式重置回去。这样只有最后一个.active元素(后面没有其他.active)会保留样式。

修改后的CSS代码:

tr.row td {
  border: 1px solid black;
  padding: 5px 12px;
}

/* 给所有.active行的td设置蓝色背景 */
tr.row.active td {
  background: blue;
}

/* 重置后面还有active兄弟的行的td背景 */
tr.row.active + tr.row.active td {
  background: transparent; /* 换成你需要的初始背景色即可 */
}

替换后,最后一个.active行的<td>会显示蓝色,其他.active行保持原样,而且不管.active元素的位置怎么动态变化,这个逻辑都能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:22:32