屏幕resize或切换移动端时React Material UI Grid布局重排方法
解决方案
核心问题梳理
<Chart>组件未被包裹在Grid item容器内,无法参与MUI栅格系统的响应式规则计算- 没有给图表区域和文本框区域配置正确的响应式栅格占比,小屏下没有指定图表占满整行的规则,自然无法触发换行
- 外层
Container的自定义display:flex样式会和Grid container的默认flex布局冲突,干扰栅格正常排布
修改后的实现代码
组件结构
<Container className={classes.boxTest2} maxWidth="xl"> <Grid container spacing={1}> {/* 给Chart包裹Grid item,配置响应式占比:xs断点<900px时占满12列整行,md及以上占6列 */} <Grid item xs={12} md={6} lg={6}> <Chart /> </Grid> <Grid item xs={4} md={2} lg={2}> <Paper className={classes.paper}> some info <Typography className={classes.tempStyle} variant="h5"> {round}°C </Typography> </Paper> </Grid> <Grid item xs={4} md={2} lg={2}> <Paper className={classes.paper}> more info </Paper> </Grid> <Grid item xs={4} md={2} lg={2}> <Paper className={classes.paper}> even more info </Paper> </Grid> </Grid> </Container>
样式调整
boxTest2: { // 删除原有的display:flex配置,避免和Grid布局冲突 }, tempStyle: { color: "red", marginTop: "20px", textAlign: "center" }, paper: { height: 200, flex: 1, display: "flex", alignItems: "center", justifyContent: "center", elevation: 8, maxWidth: "150px", // 可选:小屏下取消最大宽度限制,让文本框占满分配的栅格宽度 [theme.breakpoints.down('md')]: { maxWidth: '100%' } },
可选调整
如果需要移动端视图下三个文本框竖直排列而非一行并排,只需要将三个文本框对应的Grid item的xs属性值从4改为12即可。
内容的提问来源于stack exchange,提问作者Roni
相关产品推荐
相关产品推荐

