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

如何在TailwindCSS中结合nth-child选择器与hover伪类?

在TailwindCSS中结合nth-child选择器与hover伪类的正确方式

你的问题出在hover样式的作用对象错误:之前的hover:bg-[#6b7280]是给<tr>元素设置背景,但<td>已经通过[&>*:nth-child(even)]/[&>*:nth-child(odd)]设置了自身背景,td的背景会覆盖tr的,导致hover效果无法显现。

下面是两种可行的解决方案:

方案1:直接在tr上控制hover时的子元素样式(简洁首选)

修改tr的className,把hover样式指向它的所有子td元素,利用优先级覆盖原有奇偶列背景:

<tr 
  key={i} 
  className="[&>*:nth-child(odd)]:bg-[#eee] [&>*:nth-child(even)]:bg-white [&:hover>*]:bg-[#6b7280] group"
  onClick={() => setSelectedRowProtokoll(i === selectedRowProtokoll ? -1 : i)}
>
  {/* 你的td元素列表 */}
</tr>
  • [&:hover>*]:bg-[#6b7280]:表示当当前tr被hover时,所有直接子元素(td)应用该背景色,优先级高于奇偶列的基础样式,hover时会自动覆盖。

方案2:用group实现更细粒度的控制

如果需要单独hover某个td时变色,或者保留更多自定义空间,可以用group+group-hover组合,注意把group-hover样式放在奇偶样式之后以保证优先级:

{dataProtokoll.map((k, i) => (
  <tr 
    key={i} 
    className="group"
    onClick={() => setSelectedRowProtokoll(i === selectedRowProtokoll ? -1 : i)}
  >
    {Object.values(k).map((value, idx) => (
      <td 
        key={idx}
        className={clsx(
          'text-left border px-2.5 py-2 border-solid border-[rgb(160_160_160)]',
          '[&:nth-child(odd)]:bg-[#eee] [&:nth-child(even)]:bg-white',
          'group-hover:bg-[#6b7280]',
          i === selectedRowProtokoll && 'bg-[#6b7280]'
        )}
      >
        {value}
      </td>
    ))}
  </tr>
))}
  • 选中状态的bg-[#6b7280]优先级高于group-hover,因此选中行不会被hover样式覆盖,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:38:28