IU de material e sistema de grade

118

Estou brincando um pouco com o Material-UI . Existem opções para criar um layout de grade (como em Bootstrap )?

Se não, qual é a forma de adicionar essa funcionalidade?

Há um componente GridList, mas acho que tem um propósito diferente.

Kharandziuk
fonte
Não pense que ele tem componentes para criar grades responsivas.
Lucky Chingi
a resposta está aqui github.com/callemall/material-ui/issues/190
kharandziuk

Respostas:

126

O Material UI implementou seu próprio layout Flexbox por meio do componente Grid .

Parece que eles inicialmente queriam se manter puramente como uma biblioteca de 'componentes'. Mas um dos desenvolvedores principais decidiu que era muito importante não ter o seu próprio . Agora ele foi incorporado ao código principal e foi lançado com a v1.0.0 .

Você pode instalá-lo via:

npm install @material-ui/core

Agora está na documentação oficial com exemplos de código .

icc97
fonte
Vejo que postou a resposta que eu ia adicionar! ri muito. acabei de responder ao seu comentário sobre a resposta principal atual.
Cleanshooter
Acabei de instalar e usar o branch alfa do Material UI agora. Pode confirmar se o sistema de Layout funciona bem.
user2875289
3
O sistema de grade funciona bem, mas, existem alguns componentes que ainda não foram implementados, como Select Field. Estou preso em como usar esses campos. Você pode me ajudar com isso?
Suresh Mainali
1
Concordo com @SureshMainali porque também estou enfrentando os mesmos problemas. A maioria dos componentes tem adereços ausentes e até mesmo em relação à implementação do tema personalizado também
Sai Ram
@SaiRam Eu não diria mais, mas na verdade Selectestá faltando o, acabei de substituí-lo por botões de opção por enquanto, mas tenho certeza que não demorará muito para que o select seja transferido do tronco.
icc97
35

A partir da descrição das especificações do material design :

Listas de grade são uma alternativa às visualizações de lista padrão. As listas de grade são diferentes das grades usadas para layouts e outras apresentações visuais.

Se você está procurando uma biblioteca de componentes Grid muito leve, estou usando React-Flexbox-Grid , a implementação de flexboxgrid.cssno React.

Além disso, React-Flexbox-Grid funcionou bem com material-ui e react-toolbox (a implementação alternativa de material design).

Roy Lee
fonte
32
React-Flexbox-Grid está mal implementado no momento deste post e requer muitas dependências externas para funcionar corretamente. Além disso, @Roylee é o desenvolvedor dele ... então sua opinião é um pouco tendenciosa de qualquer maneira;) ...
Cleanshooter
1
Além disso, react-flexbox-grid depende do flexboxgrid, que não usa os mesmos pontos de interrupção de resposta recomendados no Material Design. Veja: material.io/guidelines/layout/…
Ken Gregory
@Cleanshooter seria esta a sua versão concorrente ? Talvez você também seja um pouco tendencioso :)
icc97
@ icc97 sim e não. Eu realmente não pretendia "competir", era mais uma solução temporária para o aplicativo que eu estava construindo. Fiz isso depois de ficar desapontado com os dois ... realmente não importa mais, porque os caras da CallEmAll incluíram um sistema de grade na última versão do Material-UI. Eu ainda não tentei pessoalmente embora. github.com/callemall/material-ui/pull/5808
Cleanshooter
1
@Cleanshooter, o seu parecia muito bom. Tenho testado a nova grade Material-UI e está funcionando bem até agora.
icc97
20

Procurei uma resposta para isso e a melhor maneira que encontrei foi usar o Flex e o estilo embutido em diferentes componentes.

Por exemplo, para fazer dois componentes de papel dividirem minha tela inteira em 2 componentes verticais (em uma proporção de 1: 4), o código a seguir funciona bem.

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>
    )
  }
}

Agora, com mais alguns cálculos, você pode dividir facilmente seus componentes em uma página.

Leituras adicionais sobre flex

shobhit1
fonte
2
Eu concordo, o uso de propriedades flex css proporcionou a formatação simples de que eu precisava.
James Gentes
11

Espero que não seja tarde demais para dar uma resposta.

Eu também estava procurando por um bootstrap simples, robusto, flexível e altamente customizável como o sistema react grid para usar em meus projetos.

O melhor que sei é react-pure-grid https://www.npmjs.com/package/react-pure-grid

react-pure-grid dá a você o poder de personalizar todos os aspectos do seu sistema de grade, ao mesmo tempo que possui padrões embutidos que provavelmente se adequam a qualquer projeto

Uso

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>
);
Musyoka Morris
fonte
8

O jeito que eu faço é ir para http://getbootstrap.com/customize/ e apenas marcar "sistema de grade" para fazer o download. Existem bootstrap-theme.csse bootstrap.cssnos arquivos baixados, e eu só preciso do último.

Desta forma, posso usar o sistema de grade do Bootstrap, com todo o resto do Material UI.

6324
fonte
5

Eu apenas uso https://react-bootstrap.github.io/ para Layout Responsivo e Material-ui para todos os componentes

Yuchien
fonte
3
Eu acho que é um pouco pesado :) Existe uma maneira de incluir apenas estilos relacionados à grade?
kharandziuk
2
Portanto, usando o React-Bootstrap, ainda é necessário incluir o arquivo css relevante. Em getbootstrap.com/customize, você pode personalizar para incluir apenas o sistema de grade e usar uma versão reduzida dele ~
yuchien
5

Tive dificuldade em encontrar uma estrutura de IU que implementasse os padrões do Material Design para comportamento responsivo, então criei dois pacotes que implementam um sistema de grade para o Material Design:

  1. Uma estrutura CSS: material-responsive-grid
  2. Um conjunto de componentes React que implementam essa estrutura: reat-material-responsive-grid .

Esses pacotes seguem os padrões de IU responsiva descritos pelo Google. Todos os tamanhos de viewport especificados em seus padrões são suportados levando-se em consideração as medianizes adequadas, o número recomendado de colunas e até mesmo o comportamento de um layout que excede 1600 dp. Ele deve se comportar conforme recomendado para cada dispositivo no guia de métricas do dispositivo .

Ken Gregory
fonte
1

Abaixo é feito puramente pelo sistema MUI Grid ,

MUI - Layout de grade

Com o código abaixo,

// 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>
  );
}

↓ CodeSandbox ↓

Editar sistema MUI-Grid

Hasan Sefa Ozalp
fonte
0

Aqui está um exemplo de sistema de grade com material-ui que é semelhante ao bootstrap:

<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>
Timmy
fonte