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

Antd SubMenu子菜单内容无法滚动问题求助

Antd SubMenu子项无法滚动问题解决

问题分析

当前实现存在两个核心问题导致滚动失效:

  • 直接在SubMenu内嵌套原生<div>和<li>,不符合Antd Menu组件的结构规范,SubMenu的下拉容器会对非Menu系列组件的样式产生冲突。
  • 自定义<div>的高度设置被SubMenu默认的下拉面板样式覆盖,无法触发滚动行为。

解决方案

修改代码如下,使用Antd官方的Menu.Item渲染子项,并通过popupStyle属性给SubMenu的下拉面板设置固定高度和滚动属性:

import ReactDOM from "react-dom";
import "antd/dist/antd.css";
import "./index.css";
import { Menu, Icon } from "antd";

const { SubMenu } = Menu;

function handleClick(e) {
  console.log("click", e);
}

const options = [
  { key: "1", value: "option1" },
  { key: "2", value: "option12" },
  { key: "3", value: "option13" },
  { key: "4", value: "option14" },
  { key: "5", value: "option15" },
  { key: "6", value: "option16" },
  { key: "7", value: "option17" },
  { key: "8", value: "option18" },
  { key: "9", value: "option19" },
  { key: "10", value: "option134" },
  { key: "11", value: "option132" },
  { key: "12", value: "option142" },
  { key: "13", value: "option123" }
];

ReactDOM.render(
  <Menu onClick={handleClick} style={{ width: 256 }} mode="vertical">
    <SubMenu
      key="sub4"
      title={
        <span>
          <Icon type="setting" />
          <span>Navigation Three</span>
        </span>
      }
      // 给下拉面板设置最大高度和滚动属性
      popupStyle={{ maxHeight: "100px", overflowY: "auto" }}
    >
      {/* 使用Menu.Item渲染子项,符合组件规范 */}
      {options?.map((data) => (
        <Menu.Item key={data.key}>{data.value}</Menu.Item>
      ))}
    </SubMenu>
  </Menu>,
  document.getElementById("container")
);

关键修改点

  • 替换原生元素为Menu.Item:确保子项符合Antd Menu的组件结构,避免样式冲突。
  • 设置popupStyle:直接给SubMenu的下拉面板设置maxHeight和overflowY,让下拉内容超出高度时自动触发滚动。

如果需要更灵活的自定义样式,也可以通过CSS类名覆盖Antd的默认样式:

/* 在index.css中添加 */
.ant-menu-submenu-popup {
  max-height: 100px;
  overflow-y: auto;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:50:25