【问题标题】:Material-UI: How to column wrap a listMaterial-UI:如何对列表进行列换行
【发布时间】:2021-11-20 22:11:12
【问题描述】:

我目前正在使用 Material-UI 来呈现复选框列表,就像在 this example 中所做的那样。

问题是我的列表中有大约 30 个项目,我将它们全部放入一个对话框中。我希望我的复选框列表项填充到最大高度(即 500 像素),然后 其余的列表项应该换成一个新列,填充对话框的水平空间 .

我正在寻找这样的东西:(other stackoverflow post that's asking for something similar)

这是我的代码,直接从 MUI 参考文档中复制:

<List className={classes.root}>
  {CHECKS.map((value: string) => {                     // (CHECKS = array of strings)
    const labelId = `checkbox-list-label-${value}`;

    return (
      <ListItem
        key={value}
        role={undefined}
        dense
        button
        onClick={handleToggle(value)}
        className={classes.listItem}
      >
        <ListItemIcon>
          <Checkbox
            edge="start"
            checked={checked.indexOf(value) !== -1}
            tabIndex={-1}
            disableRipple
            inputProps={{ "aria-labelledby": labelId }}
          />
        </ListItemIcon>
        <ListItemText id={labelId} primary={value} />
      </ListItem>
    );
  })}
</List>

但是我的“root”和“listItem”类并没有改变任何东西。这是我的(无用的)CSS:

checklist: {
  display: "flex",
  flexWrap: "wrap",
  flexDirection: "column",
  height: "500px",
},
item: {
  flexBasis: "50%",     // Something I saw online
},

我需要重写一些标准的 MUI 样式吗?

(我真的不想将我的 CHECKS 列表拆分为 3 个单独的列表和 flexbox,然后将所有内容包装在一个大的 flexbox 中,等等)

【问题讨论】:

    标签: css reactjs flexbox material-ui


    【解决方案1】:

    您可以使用column wrap,并确保将overflow 设置为auto 以显示水平滚动条:

    const useStyles = makeStyles({
      container: {
        display: "flex",
        flexFlow: "column wrap",
        gap: "0 30px",
        backgroundColor: "pink",
        height: 300, // set the height limit to your liking
        overflow: "auto"
      },
      item: {
        width: "auto"
      }
    });
    
    <div className={classes.container}>
      {CHECKS.map((value: string) => {
        return (
          <ListItem key={value} className={classes.item}>
            <ListItemIcon>
              <Checkbox edge="start" disableRipple />
            </ListItemIcon>
            <ListItemText primary={value} />
          </ListItem>
        );
      })}
    </div>
    

    现场演示

    【讨论】:

    • 这太好了,谢谢!!请注意 - 我还必须删除我的 MUI 列表组件的 root 类的 maxWidth 属性,我直接从 MUI 参考文档中复制了该属性。 (它将我的列表宽度限制为 360 像素,这完全覆盖了您的解决方案。)
    猜你喜欢
    • 2022-01-18
    • 2018-12-06
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2016-05-05
    • 2020-12-26
    • 2021-07-11
    • 2017-06-03
    相关资源
    最近更新 更多