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

Material UI的Menu组件如何正确使用transformOrigin调整弹出位置

报错原因

transformOrigin属性的vertical字段为枚举类型,仅支持'top'、'center'、'bottom'三个固定字符串值,传入自定义数值、其他格式内容都会触发类型错误或渲染异常,不能直接通过修改该字段实现自定义像素偏移。
你当前默认vertical:'bottom'的效果如下:
默认vertical:bottom效果

解决方案

你可以根据需求选择以下两种实现方式:

  • 方案1:内置枚举值粗调
    仅需要大范围向上移动实现覆盖效果时,直接把transformOrigin.vertical改为'top'即可,修改后菜单的顶部会和锚点元素的底部对齐,相比原配置整体向上移动相当于菜单自身高度的距离,修改后的核心配置如下:
    <Menu
      elevation={0}
      getContentAnchorEl={null}
      anchorOrigin={{
        vertical: "bottom",
        horizontal: "center",
      }}
      transformOrigin={{
        vertical: "top", // 仅修改这一行即可
        horizontal: "center",
      }}
      {...props}
      style={{ fontSize: "1.3rem" }}
    />
    
  • 方案2:自定义样式做像素级微调
    需要精准控制偏移量时,直接在withStyles的paper样式中添加Y轴偏移覆盖默认定位即可,比如需要向上移动8px就设置translateY(-8px),向下移动就填正值,完整修改后的代码如下:
    const StyledMenu = withStyles({
      paper: {
        border: "1px solid #FFFFFF",
        boxShadow:
          "0px 16px 24px rgba(0, 0, 0, 0.14), 0px 6px 30px rgba(0, 0, 0, 0.12), 0px 8px 10px rgba(0, 0, 0, 0.2)",
        borderRadius: "0px",
        fontSize: "1.3rem",
        // 新增以下行,数值根据你的需求调整
        transform: "translateY(-8px) !important",
      },
      list: {
        fontSize: "1.3rem",
      },
    })((props: MenuProps) => (
      <Menu
        elevation={0}
        getContentAnchorEl={null}
        anchorOrigin={{
          vertical: "bottom",
          horizontal: "center",
        }}
        transformOrigin={{
          vertical: "bottom",
          horizontal: "center",
        }}
        {...props}
        style={{ fontSize: "1.3rem" }}
      />
    ));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:57:04