简体   繁体   English

React Material UI网格

[英]React Material UI Grid

Is there any correct and easy way to create kind of table with Material UI ?. 有没有使用Material UI创建表的正确正确的方法? direction="column" or direction="row" are not working if I want to have different height columns. 如果我想使用不同的高度列,则direction =“ column”或direction =“ row”不起作用。 Any suggestions? 有什么建议么?

在此处输入图片说明

If you want to use Material-ui built-in Grid system you can do it by using 2 grid containers, one with direction="row" (default) and second (child) with direction="column" . 如果要使用Material-ui内置网格系统,可以使用2个网格容器来实现,其中一个容器的direction="row" (默认),第二个容器的子级为direction="column" It needs a bit of individual styling, might look "hacky", but I don't know other way: 它需要一些个性化的样式,可能看起来有些“ hacky”,但我不知道其他方式:

import React from "react";
import ReactDOM from "react-dom";
import Grid from "@material-ui/core/Grid";
import Box from "@material-ui/core/Box";
import { makeStyles } from "@material-ui/styles";

const useStyles = makeStyles({
  box: {
    height: "100%",
    width: "100%"
  },
  container: {
    height: "400px"
  },
  innerContainer: {
    height: "100%"
  },
  item: {
    flex: 1
  }
});

function App() {
  const classes = useStyles();
  return (
    <Grid spacing={4} className={classes.container} container>
      <Grid xs={4} item>
        <Grid
          spacing={4}
          direction="column"
          className={classes.container}
          container
        >
          <Grid className={classes.item} item>
            <Box className={classes.box} bgcolor="blue" />
          </Grid>
          <Grid className={classes.item} item>
            <Box className={classes.box} bgcolor="red" />
          </Grid>
        </Grid>
      </Grid>
      <Grid xs={8} item>
        <Box className={classes.box} bgcolor="green" />
      </Grid>
    </Grid>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

LIVE EXAMPlE 现场表演

Other option is to use CSS Grid. 另一种选择是使用CSS Grid。 It requires much less elements, and (at least for me) is simplier. 它需要的元素要少得多,并且(至少对我而言)更简单。 However, it doesn't work in Internet Explorer, if you care about such thing. 但是,如果您担心这种情况,则在Internet Explorer中将无法使用。

import React from "react";
import ReactDOM from "react-dom";
import Box from "@material-ui/core/Box";
import { makeStyles } from "@material-ui/styles";


const useStyles = makeStyles({
  container: {
    height: '400px',
    width: "100%",
    display: 'grid',
    gridTemplateColumns: '1fr 2fr',
    gridTemplateRows: '1fr 1fr',
    gridGap: "20px",

  },
  firstChild: {
    gridRow: '1 / 2',
    gridColumn: '1 / 2',
  },
  secondChild: {
    gridRow: '1 / 3',
    gridColumn: '2 / 3',
  },
  thirdChild: {
    gridRow: '2 / 3',
    gridColumn: '1 / 2',
  },
});

function App() {
  const classes = useStyles();
  return (
    <Box className={classes.container}>
      <Box className={classes.firstChild} bgcolor="blue" />
      <Box className={classes.secondChild} bgcolor="red" />
      <Box className={classes.secondThird} bgcolor="green" />
    </Box>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

LIVE EXAMPLE 现场例子

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM