reactjs - 响应式和拆分式布局
问题描述
我用react-splitter-layout和材质 ui库开始了一个项目。
我想找到一种方法来创建响应式组件,使用材质 ui Grid 或 Box 组件
我遇到了响应问题,我希望我的左侧面板能够根据容器的大小(而不是窗口大小)对 Grid 组件做出响应(使用 xs / md / lg),如下例所示,不是这种情况。它使用视口大小。(我知道这是正常的,因为媒体查询)。
这里的代码示例:https ://codesandbox.io/s/material-demo-i04rr?file=/demo.js (建议在新选项卡中打开渲染查看问题)
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Grid from "@material-ui/core/Grid";
import SplitterLayout from "react-splitter-layout";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
padding: theme.spacing(2),
textAlign: "center",
color: theme.palette.text.secondary
}
}));
export default function CenteredGrid() {
const classes = useStyles();
return (
<SplitterLayout>
<div className={classes.root}>
<Grid container spacing={3}>
<Grid item xs={4} md={6} lg={8}>
<Paper className={classes.paper}>xs=3</Paper>
</Grid>
<Grid item xs={4} md={4} lg={2}>
<Paper className={classes.paper}>xs=3</Paper>
</Grid>
<Grid item xs={4} md={2} lg={2}>
<Paper className={classes.paper}>xs=3</Paper>
</Grid>
</Grid>
</div>
<div>Panel 2</div>
</SplitterLayout>
);
}
有人有解决这个问题的方法吗?
此致,
编辑 我还发布在材料 ui github https://github.com/mui-org/material-ui/issues/25189
解决方案
这是我开始使用 material-UI 或任何 CSS 框架时的问题之一。
Material-UI 目前几乎支持你需要特别是响应式的情况,我从不使用任何其他库/框架来进行响应式。首先,您知道所有xs
, sm
,md
都基于屏幕大小,而不是它们的容器。
那么,这里的问题是你是怎么称呼“容器”的?当您使用 Material-UI 时,您应该根据屏幕大小而不是特定的容器来布局所有内容。因为您所考虑的“容器”在响应中没有任何意义。它只是帮助您解决布局问题。
老实说,只要换个思路,用 Material-UI 的方式思考,关于响应式的一切都会变得容易。
推荐阅读
- c - 在 Windows 中使 CC=other_cc
- java - 如何创建动态变量名?Android Studio id 名称问题
- emacs - emacs text-scale-decrease 和 text-scale-increase 仅显示数字模式增量
- android - com.google.android.material.appbar.AppBarLayout$LayoutParams 无法转换为 androidx.coordinatorlayout.widget.CoordinatorLayout$LayoutParams
- oracle - 如何在 Oracle Database 21c XE 上安装演示模式,例如 SCOTT / TIGER?
- python - 为什么 Python 在计算中将精确的小数转换为近似值?
- haskell - 对网格的每个元素应用一些操作 F?- 哈斯克尔
- sql - 对于这种情况,正确的 SQL Server 语句是什么?
- cuda - numba gpu:如何计算两个数组的最大相对误差?
- html - 删除 Chrome 上嵌套 div 之间的奇怪空白