reactjs 如何对齐物料界面菜单项?

rnmwe5a2  于 2023-02-08  发布在  React
关注(0)|答案(4)|浏览(202)

我使用material-ui的菜单和菜单项构建了一个选择下拉菜单,但我发现有一件事很奇怪:下拉菜单始终扩展到框的左侧,如下图所示:

我尝试在<MenuItem>中使用alignItems属性,但没有成功。
我的代码如下所示。有人能帮我解决这个问题吗?我真的很感谢你的帮助!

<Menu
            id="order-menu"
            anchorEl={anchorEl}
            keepMounted
            open={Boolean(anchorEl)}
            onClose={() => setAnchorEl(null)}
          >
            {options.map((option, index) => (
              <MenuItem
                key={option}
                selected={index === selectedIndex}
                onClick={(event) => handleMenuItemClick(event, index)}
              >
                {option}
              </MenuItem>
            ))}
          </Menu>
wnvonmuf

wnvonmuf1#

控制此操作的默认样式位于ListItem中,其中指定了justifyContent:“灵活启动”。
您可以将其更改为右对齐:

const MenuItem = withStyles({
  root: {
    justifyContent: "flex-end"
  }
})(MuiMenuItem);

下面是一个完整的工作示例:

import React from "react";
import Button from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import MuiMenuItem from "@material-ui/core/MenuItem";
import { withStyles } from "@material-ui/core/styles";

const MenuItem = withStyles({
  root: {
    justifyContent: "flex-end"
  }
})(MuiMenuItem);

export default function SimpleMenu() {
  const [anchorEl, setAnchorEl] = React.useState(null);

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

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

  return (
    <div>
      <Button
        aria-controls="simple-menu"
        aria-haspopup="true"
        onClick={handleClick}
      >
        Open Menu
      </Button>
      <Menu
        id="simple-menu"
        anchorEl={anchorEl}
        keepMounted
        open={Boolean(anchorEl)}
        onClose={handleClose}
      >
        <MenuItem onClick={handleClose}>1</MenuItem>
        <MenuItem onClick={handleClose}>2</MenuItem>
        <MenuItem onClick={handleClose}>3</MenuItem>
        <MenuItem onClick={handleClose}>10</MenuItem>
        <MenuItem onClick={handleClose}>20</MenuItem>
        <MenuItem onClick={handleClose}>300</MenuItem>
      </Menu>
    </div>
  );
}

相关文件:

klsxnrf1

klsxnrf12#

更灵活地解决您的问题,
<MenuItem>中使用<ListItemText>这样你就可以对元素的一部分设置样式。

<MenuItem onClick={handleClose}>
      <ListItemText style={{ paddingRight: 50 }}>undo</ListItemText>
      <ListItemText style={{ textAlign: "right" }}>ctrl+z</ListItemText>
    </MenuItem>

例如:shortcut hint on the right

nue99wik

nue99wik3#

您可以使用以下代码对齐菜单

anchorOrigin={{
  vertical: 'bottom',
  horizontal: 'center',
}}
transformOrigin={{
  vertical: 'bottom',
  horizontal: 'center',
}}

示例

<Menu
 id="order-menu"
 anchorEl={anchorEl}
 keepMounted
 open={Boolean(anchorEl)}
 onClose={() => setAnchorEl(null)}
 anchorOrigin={{
   vertical: 'bottom',
   horizontal: 'center',
 }}
 transformOrigin={{
   vertical: 'bottom',
   horizontal: 'center',
 }}
 style={{top: 170}} // you can set top position so that it will show under the selection
>
 {options.map((option, index) => (
   <MenuItem
     key={option}
     selected={index === selectedIndex}
     onClick={(event) => handleMenuItemClick(event, index)}
   >
     {option}
   </MenuItem>
 ))}
nfg76nw0

nfg76nw04#

MUI5可以使用SX。

<MenuItem sx={{ justifyContent: 'flex-end' }}>

相关问题