我正在使用由此命令安装的材料ui版本1.
npm install -S material-ui@next
每次我想使用时,页面中都会出现不需要的水平滚动。例如,这是一个简单的代码:
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles, createStyleSheet } from 'material-ui/styles';
import Paper from 'material-ui/Paper';
import Grid from 'material-ui/Grid';
/* project imports */
import NavMenu from './Page-Parts/NavMenu';
import LoginPanel from './Login-Parts/LoginPanel';
const styleSheet = createStyleSheet('FullWidthGrid', theme => ({
root: {
flexGrow: 1,
marginTop: 0,
},
paper: {
padding: 16,
textAlign: 'center',
color: theme.palette.text.secondary,
marginTop: "3rem"
},
}));
function Login(props){
const classes = props.classes;
return (
<div className={classes.root}>
<Grid container gutter={24} justify='center'>
<Grid item xs={12} md={12} sm={12} lg={12}>
<NavMenu/>
</Grid>
<Grid item xs={6} sm={6} md={6} lg={6}>
<Paper className={classes.paper}>
<LoginPanel />
</Paper>
</Grid>
</Grid>
</div>
);
}
Login.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styleSheet)(Login);
我无法使用bootstrap或任何其他网格布局选项,因为它们与此库冲突。这个代码示例并不是什么大问题但是当我在组件的其他部分使用时(例如在抽屉中),水平滚动出现会让人觉得难看 NavMenu和LoginPanel是一些自制组件,它们没问题。使用它们而不会导致水平滚动
答案 0 :(得分:18)
我有同样的问题。我想出了几个解决方案,但感觉不是很优雅:
禁用间距
不幸的是,这会从容器中的子网格项中删除所有填充:
<Grid container
spacing={0}>
手动修复CSS
这就是我最终做的事情:
<Grid container
style={{
margin: 0,
width: '100%',
}}>
答案 1 :(得分:12)
从评论中复制了简单的解决方案:
将 xs={12}
添加到 <Grid container>
<Grid container spacing={3} xs={12}>
归功于https://github.com/mui-org/material-ui/issues/7466#issuecomment-509150645
答案 2 :(得分:4)
这是由spacing
引起的。有时我们仍然可以通过限制容器下的网格来使用spacing
。
<Container maxWidth={false}>
<Grid container spacing={6}>
Omit
</Grid>
</Container>
答案 3 :(得分:2)
这对我有用!
<Box style={{overflow: 'auto'}}>
<Grid>...</Grid>
</Box>
答案 4 :(得分:0)
我面临着同样的问题。从Grid容器中删除间距并不能解决问题。
解决方案:
设置maxWidth可以解决问题并分配所需的宽度,而不是在Grid容器的父项上进行设置。例如,如果我们在作为Grid容器父级的Box上设置maxWidth,则Grid不会水平溢出。
我们不需要在Grid容器上将宽度设置为100%,因为其目的是默认情况下适应100%的宽度。
<Box style={{ maxWidth: 600}}>
<Grid container spacing={3}>
...
</Grid>
</Box>
答案 5 :(得分:0)
我想到的主意是
<Grid container>
<Grid item xs={12} md={4}>
<div style={{width:"97%",margin:"0 auto"}}>
.....Your content
</div>
</Grid>
<Grid item xs={12} md={4}>
<div style={{width:"97%",margin:"0 auto"}}>
.....Your content
</div>
</Grid>
<Grid item xs={12} md={4}>
<div style={{width:"97%",margin:"0 auto"}}>
.....Your content
</div>
</Grid>
</Grid>
答案 6 :(得分:0)
最好的解决方案是将网格包装在最大宽度的容器中
<Container>
<Grid container spacing={2}>
<Grid item sm={6}></Grid>
<Grid item sm={6}></Grid>
<Grid item sm={6}></Grid>
<Grid item sm={6}></Grid>
</Grid>
</Container>
这样,容器会处理溢出问题,并且网格始终会响应性地扩展到父级。到目前为止,这是我找到的最优雅的解决方案。
提示:如果您正在使用该库创建类似仪表板的内容,则始终将内容区域的父级设置为<Container>
,这样就永远不会发生溢出问题。试一试。在奋斗了一段时间之后,到处都找不到非常优雅的解决方案,这对我来说工作得很好。我必须说,应该在React Material UI页面中对此进行很好的记录。
答案 7 :(得分:0)
这是具有负边距的网格的已知限制。 https://material-ui.com/components/grid/#limitations。
不要使用网格间距并手动配置间距。
向父级添加至少等于一半间距的填充,例如:
12 = 3(间距)* 8(主题间距像素)/ 2
<Box p={12}> {/* or style={{ padding: 12 }} */}
<Grid ... spacing={3}>
..additional configuration
</Grid>
</Box>
这个解决方案的缺点是它改变了组件的外观。
<Box style={{overflowX: "hidden"}}>
<Grid ... spacing={3}>
..additional configuration
</Grid>
</Box>
此解决方案的缺点是(在我的测试中)会导致触摸屏尝试垂直滚动时出现问题...
答案 8 :(得分:0)
最新版本的 Material-UI (v5.0.0-alpha.30) 现已修复了根本问题。见https://github.com/mui-org/material-ui/issues/7466#issuecomment-820736245。