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

Recharts图表覆盖Drawer组件问题求助(Next.js+TailwindCSS)

解决Recharts图表显示在Drawer上层的问题

核心原因

  1. Recharts的Tooltip、Legend等组件默认通过React Portal挂载到document.body,它们的默认z-index可能高于你设置的Drawer的99,导致显示在顶层。
  2. SVG元素本身不遵循CSS的z-index规则,给图表内部元素(如Bar、BarChart)加z-index完全无效,只能通过调整图表容器的堆叠上下文来控制层级。

具体解决方案

方案1:调整Recharts Portal组件的z-index

直接给Tooltip和Legend设置低于Drawer的z-index:

// 在WeeklyIncome组件中修改
<Tooltip zIndex={90} />
<Legend wrapperStyle={{ zIndex: 90 }} />

方案2:优化图表容器的堆叠上下文

移除ResponsiveContainer的负数z-index(负数可能导致元素脱离正常堆叠流),改为正数且低于Drawer的z-index:

<ResponsiveContainer
  className="relative z-0"
  style={{
    position: "relative",
    zIndex: 1, // 设置为正数,确保在正常堆叠流中
  }}
>
  {/* ...图表内容 */}
</ResponsiveContainer>

方案3:提高Drawer的z-index优先级

把Drawer的z-index从99调高到100,确保绝对高于Recharts元素的默认层级:

// 在Drawer组件中修改
<motion.div
  className={`fixed inset-0 bg-black bg-opacity-50 z-[100]`}
  // ...其他动画属性
>
  <motion.div
    className={`fixed left-0 top-0 w-80 h-full bg-white z-[100]`}
    // ...其他动画属性
  >
    {/* ...Drawer内容 */}
  </motion.div>
</motion.div>

验证效果

完成上述修改后,打开Drawer时,图表(包括Tooltip和Legend)会被Drawer及其背景遮罩完全覆盖,达到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:27:06