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

React/Tailwind项目中map生成卡片hover样式批量异常问题求助

解决React+Tailwind卡片hover样式扩散问题

你遇到的问题大概率是两种情况:要么是直接操作DOM的方式出现了意外,要么是你的custom-box-shadow CSS规则写得有问题(比如误用了兄弟选择器,导致当前元素后的所有卡片都被选中)。更符合React+Tailwind最佳实践的是下面两种方案:

方案一:用Tailwind hover伪类(零JS,最推荐)

Tailwind支持直接给自定义类加hover:前缀,只要你把自定义样式放到@layer指令里:

  1. 在全局CSS文件(比如globals.css)里定义自定义阴影:
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer utilities {
  .custom-box-shadow {
    /* 替换成你的自定义阴影值 */
    box-shadow: 0 12px 24px -8px rgba(0, 0, 0, 0.15);
  }
}
  1. 直接在卡片的className里添加hover:custom-box-shadow,不用写任何鼠标事件:
{data.map((project, index) => {
  return (
    <div
      key={index}
      className='rounded-lg bg-white p-6 shadow-xl transition-all duration-150 hover:custom-box-shadow'>
      [...]
    </div>
  );
})}

方案二:用React状态管理(适合复杂交互场景)

如果hover时需要额外逻辑,用状态记录当前hover的卡片索引,通过状态控制类名:

import { useState } from 'react';

// 组件内部
const [hoveredIdx, setHoveredIdx] = useState(-1);

{data.map((project, index) => {
  return (
    <div
      key={index}
      onMouseEnter={() => setHoveredIdx(index)}
      onMouseLeave={() => setHoveredIdx(-1)}
      className={`rounded-lg bg-white p-6 shadow-xl transition-all duration-150 ${hoveredIdx === index ? 'custom-box-shadow' : ''}`}>
      [...]
    </div>
  );
})}

排查原代码问题

如果你一定要用原来的DOM操作方式,检查你的custom-box-shadow CSS规则,有没有写类似.custom-box-shadow ~ div { ... }这种会选中当前元素所有后续兄弟的选择器,这会导致hover一张卡片时后面的卡片都被影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:40:28