我有一个简单的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>
使用的负边距之间的相互作用有关,但是我无法完全解决。
答案 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>
答案 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