简单材质UI对话框示例具有不需要的滚动条

时间:2019-05-15 19:45:07

标签: css reactjs material-ui

我有一个简单的Material UI对话框,其中包含一个网格,并且它具有一个滚动条,即使屏幕足够容纳整个内容,该滚动条也可以滚动几个像素。

      <Dialog open={isOpen} onClose={() => changeIsOpen(false)}>
        <DialogContent>
          <Grid container spacing={3}>
            <Grid item xs={12} sm={6}>
              <TextField label="First Name" fullWidth />
            </Grid>
            <Grid item xs={12} sm={6}>
              <TextField label="Last Name" fullWidth />
            </Grid>
            <Grid item xs={12}>
              <TextField label="Username" fullWidth />
            </Grid>
          </Grid>
        </DialogContent>
        <DialogActions>
          <Button
            color="secondary"
            variant="contained"
            onClick={() => changeIsOpen(false)}
          >
            Cancel
          </Button>
          <Button
            color="primary"
            variant="contained"
            onClick={() => changeIsOpen(false)}
          >
            OK
          </Button>
        </DialogActions>
      </Dialog>

此代码位于https://codesandbox.io/s/cool-cherry-or0r8,供您查看。

我不想使用overflow: hidden,因为如果页面太小,则会出现滚动条,这是正确的。 (在这个包含3个字段的玩具示例中不太可能发生,但在较大的对话框中很容易发生)。

我认为问题与flexbox和<Grid>使用的负边距之间的相互作用有关,但是我无法完全解决。

2 个答案:

答案 0 :(得分:1)

将您的DialogContent替换为以下内容:

<DialogContent>
  <div style={{ overflow: "hidden", height: "100%", width: "100%" }}>
    <div
      style={{
        paddingRight: 17,
        height: "100%",
        width: "100%",
        boxSizing: "content-box",
        overflow: "scroll"
      }}
    >
      <Grid container spacing={3}>
        <Grid item xs={12} sm={6}>
          <TextField label="First Name" fullWidth />
        </Grid>
        <Grid item xs={12} sm={6}>
          <TextField label="Last Name" fullWidth />
        </Grid>
        <Grid item xs={12}>
          <TextField label="Username" fullWidth />
        </Grid>
      </Grid>
    </div>
  </div>
</DialogContent>

演示:https://codesandbox.io/s/09ng6

此答案的信用:https://stackoverflow.com/a/16671476/7427111

答案 1 :(得分:0)

在材料ui的github中发布了一种解决方法。我认为它是一个修补程序,仍然不是解决方案,但是对我有用。

我的Grid容器的问题是在间距4上,渲染的元素具有-16px的边距。因此,您希望通过一些填充来抵消该余量。

<div style={{ padding:8 }}>
  <Grid container spacing={4}>

这可以解决问题。我使用8px,因为间距4将呈现-16px的边距。希望Material-UI的合作者将来会提供更好的解决方案。

此处的修补程序参考:https://github.com/mui-org/material-ui/issues/7466 https://material-ui.com/components/grid/#negative-margin