【问题标题】:Material UI and Grid systemMaterial UI 和 Grid 系统
【发布时间】:2016-02-13 18:41:40
【问题描述】:

我在玩Material-UI。有没有创建网格布局的选项(如Bootstrap)?

如果没有,添加此功能的方法是什么?

有一个GridList component,但我猜它有一些不同的目的。

【问题讨论】:

标签: reactjs material-design material-ui grid-system


【解决方案1】:

Material UI 已经通过Grid component 实现了自己的 Flexbox 布局。

看来他们initially wanted 将自己保持为纯粹的“组件”库。但核心开发人员之一decided it was too important not to have their own。现在是merged into the core codereleased with v1.0.0

您可以通过以下方式安装它:

npm install @material-ui/core

现在在官方documentation with code examples

【讨论】:

  • 我看到你发布了我刚刚要添加的答案!哈哈。刚刚回复了您对当前主要答案的评论。
  • 刚刚安装并使用 Material UI 的 alpha 分支。可以确认 Layout 系统运行良好。
  • 网格系统运行良好,但是有些组件还没有实现,比如Select Field。我被困在如何使用这些领域。你能帮我解决这个问题吗?
  • 我同意@SureshMainali,因为我也面临同样的问题。大多数组件都缺少道具,甚至还缺少自定义主题实现
  • @SaiRam 我不会说太多,但确实缺少Select,我现在只是用单选按钮替换它,但我相信不久之后选择是从主干移植的。
【解决方案2】:

来自material design specs的描述:

网格列表是标准列表视图的替代方案。网格列表是 不同于用于布局和其他视觉呈现的网格。

如果你正在寻找一个更轻量级的 Grid 组件库,我正在使用 React-Flexbox-Gridflexboxgrid.css 在 React 中的实现。

最重要的是,React-Flexbox-Gridmaterial-uireact-toolbox(替代材料设计实现)都很好地配合。

【讨论】:

  • React-Flexbox-Grid 在本文发布时实现得很差,并且需要很多外部依赖项才能正常运行。另外,@Roylee 是它的开发者......所以他的意见无论如何都有点偏见;)......
  • 另外,react-flexbox-grid 依赖于 flexboxgrid,它不使用 Material Design 中推荐的相同的响应式断点。见:material.io/guidelines/layout/…
  • @Cleanshooter 这会是你的competing version吗?也许你也有点偏颇:)
  • @icc97 是和否。并不是真的打算“竞争”它更多的是我正在构建的应用程序的权宜之计。在对两者都感到失望之后,我做到了……但这真的不再重要了,因为 CallEmAll 的人在最新版本的 Material-UI 中包含了一个网格系统。我还没有亲自尝试过。 github.com/callemall/material-ui/pull/5808
  • @Cleanshooter 你的看起来不错。我一直在测试新的 Material-UI 网格,到目前为止它运行良好。
【解决方案3】:

我四处寻找答案,发现最好的方法是在不同的组件上使用 Flex 和内联样式。

例如,让两个纸组件将我的全屏分成 2 个垂直组件(比例为 1:4),以下代码可以正常工作。

const styles = {
  div:{
    display: 'flex',
    flexDirection: 'row wrap',
    padding: 20,
    width: '100%'
  },
  paperLeft:{
    flex: 1,
    height: '100%',
    margin: 10,
    textAlign: 'center',
    padding: 10
  },
  paperRight:{
    height: 600,
    flex: 4,
    margin: 10,
    textAlign: 'center',
  }
};

class ExampleComponent extends React.Component {
  render() {
    return (
      <div>
        <div style={styles.div}>
          <Paper zDepth={3} style={styles.paperLeft}>
            <h4>First Vertical component</h4>
          </Paper>
          <Paper zDepth={3} style={styles.paperRight}>
              <h4>Second Vertical component</h4>
          </Paper>
        </div>
      </div>
    )
  }
}

现在,通过更多计算,您可以轻松地在页面上划分组件。

Further Reading on flex

【讨论】:

  • 我同意,使用 flex css 属性提供了我需要的简单格式。
【解决方案4】:

我希望现在给出回应还为时不晚。

我还在寻找一种简单、健壮、灵活且高度可定制的引导程序,例如在我的项目中使用的 react 网格系统。

我所知道的最好的是react-pure-gridhttps://www.npmjs.com/package/react-pure-grid

react-pure-grid 让您能够自定义网格系统的各个方面,同时它内置了可能适合任何项目的默认值

用法

npm install react-pure-grid --save

-

import {Container, Row, Col} from 'react-pure-grid';

const App = () => (
      <Container>
        <Row>
          <Col xs={6} md={4} lg={3}>Hello, world!</Col>
        </Row>
        <Row>
            <Col xsOffset={5} xs={7}>Welcome!</Col>
        </Row>
      </Container>
);

【讨论】:

    【解决方案5】:

    我的做法是去http://getbootstrap.com/customize/,只勾选“网格系统”即可下载。下载的文件中有bootstrap-theme.cssbootstrap.css,我只需要后者。

    通过这种方式,我可以使用 Bootstrap 的网格系统,以及 Material UI 中的其他所有内容。

    【讨论】:

      【解决方案6】:

      以下纯属MUI Grid system制作,

      使用下面的代码,

      // MuiGrid.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";
      
      const useStyles = makeStyles(theme => ({
        root: {
          flexGrow: 1
        },
        paper: {
          padding: theme.spacing(2),
          textAlign: "center",
          color: theme.palette.text.secondary,
          backgroundColor: "#b5b5b5",
          margin: "10px"
        }
      }));
      
      export default function FullWidthGrid() {
        const classes = useStyles();
      
        return (
          <div className={classes.root}>
            <Grid container spacing={0}>
              <Grid item xs={12}>
                <Paper className={classes.paper}>xs=12</Paper>
              </Grid>
              <Grid item xs={12} sm={6}>
                <Paper className={classes.paper}>xs=12 sm=6</Paper>
              </Grid>
              <Grid item xs={12} sm={6}>
                <Paper className={classes.paper}>xs=12 sm=6</Paper>
              </Grid>
              <Grid item xs={6} sm={3}>
                <Paper className={classes.paper}>xs=6 sm=3</Paper>
              </Grid>
              <Grid item xs={6} sm={3}>
                <Paper className={classes.paper}>xs=6 sm=3</Paper>
              </Grid>
              <Grid item xs={6} sm={3}>
                <Paper className={classes.paper}>xs=6 sm=3</Paper>
              </Grid>
              <Grid item xs={6} sm={3}>
                <Paper className={classes.paper}>xs=6 sm=3</Paper>
              </Grid>
            </Grid>
          </div>
        );
      }
      

      ↓ 代码沙盒 ↓

      【讨论】:

      • 不错的示例演示!
      • 演示是一个基本的例子。通常大型项目有嵌套网格,spacing 无法按预期工作。
      【解决方案7】:

      这里是一个类似于 bootstrap 的带有 material-ui 的网格系统示例:

      <Grid container>
          <Grid item xs={12} sm={4} md={4} lg={4}>
          </Grid>
          <Grid item xs={12} sm={4} md={4} lg={4}>
          </Grid>
       </Grid>
      

      【讨论】:

        猜你喜欢
        • 2017-03-25
        • 2016-09-16
        • 2019-02-11
        • 2021-05-24
        • 1970-01-01
        • 2020-10-25
        • 2021-08-17
        • 2016-11-25
        • 2021-10-25
        相关资源
        最近更新 更多