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

如何为Material UI和React的子菜单创建分支线条?

为Material UI子菜单实现分支线条效果

带分支线条的子菜单示例

我是Material UI和React的新手,想了解是否有办法为子菜单实现这种“分支线条”效果?参考图片里“设置”选项有分支线条连接到其子菜单。

感谢您的解答!


实现思路与方案

要做出这种分支线条效果,核心是靠自定义CSS绘制连接线条,结合Material UI菜单组件的层级结构来定位线条:

  1. 定位父菜单项与子菜单
    Material UI的MenuItem和Menu组件会生成固定结构的DOM元素,我们可以通过组件自带类名(比如MuiMenuItem-root、MuiMenu-root)来定位父项和子菜单的位置。

  2. 用CSS伪元素绘制线条
    给包含子菜单的父菜单项添加伪元素,绘制垂直和水平线条连接到子菜单:

/* 给带子女菜单的父项加相对定位 */
.menu-item-with-submenu {
  position: relative;
}

/* 绘制从父项延伸的垂直分支线 */
.menu-item-with-submenu:after {
  content: '';
  position: absolute;
  right: -12px;
  top: 50%;
  transform: translateY(-50%);
  height: 100%;
  width: 1px;
  background-color: #ccc;
}

/* 绘制连接子菜单的水平线 */
.menu-item-with-submenu + .MuiMenu-root:before {
  content: '';
  position: absolute;
  left: -12px;
  top: 20px;
  width: 12px;
  height: 1px;
  background-color: #ccc;
}
  1. 在React组件中应用
    在你的React组件里,给带子女菜单的MenuItem加上自定义类名,再引入上述CSS:
import { Menu, MenuItem } from '@mui/material';
import './CustomMenuStyles.css';

function CustomMenu() {
  const [anchorEl, setAnchorEl] = useState(null);
  const open = Boolean(anchorEl);

  const handleClick = (event) => {
    setAnchorEl(event.currentTarget);
  };

  const handleClose = () => {
    setAnchorEl(null);
  };

  return (
    <div>
      <MenuItem 
        className="menu-item-with-submenu"
        onClick={handleClick}
      >
        设置
      </MenuItem>
      <Menu
        anchorEl={anchorEl}
        open={open}
        onClose={handleClose}
      >
        <MenuItem onClick={handleClose}>账户设置</MenuItem>
        <MenuItem onClick={handleClose}>主题设置</MenuItem>
      </Menu>
    </div>
  );
}
  1. 细节调整适配需求
    根据你的UI设计,修改线条的颜色、宽度、位置参数(比如right、left、top的数值);如果是多层嵌套子菜单,需要为更深层级的菜单添加对应线条样式,保证线条连贯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:59:56