Interfaccia utente materiale e sistema Grid


118

Sto giocando un po 'con Material-UI . Esistono opzioni per creare un layout di griglia (come in Bootstrap )?

In caso negativo, qual è il modo per aggiungere questa funzionalità?

C'è un componente GridList ma immagino che abbia uno scopo diverso.


Non pensare che abbia componenti per creare griglie reattive.
Lucky Chingi

Risposte:


126

L'interfaccia utente dei materiali ha implementato il proprio layout Flexbox tramite il componente Grid .

Sembra che inizialmente volessero mantenersi come una semplice libreria di "componenti". Ma uno degli sviluppatori principali ha deciso che era troppo importante non avere il proprio . Ora è stato unito al codice principale ed è stato rilasciato con la v1.0.0 .

Puoi installarlo tramite:

npm install @material-ui/core

Ora è nella documentazione ufficiale con esempi di codice .


Vedo che hai postato la risposta che stavo per aggiungere! lol. ha appena risposto al tuo commento sull'attuale risposta principale.
Cleanshooter

Ho appena installato e utilizzando il ramo alpha dell'interfaccia utente di Material ora. Posso confermare che il sistema di layout funziona bene.
user2875289

3
Il sistema a griglia funziona bene ma, ci sono alcuni componenti che non sono stati ancora implementati, come Select Field. Sono bloccato su come utilizzare questi campi. Puoi aiutarmi in questo?
Suresh Mainali

1
Sono d'accordo con @SureshMainali perché anch'io sto affrontando gli stessi problemi. La maggior parte dei componenti ha oggetti di scena mancanti e anche per quanto riguarda l'implementazione del tema personalizzato
Sai Ram

@SaiRam non direi di più, ma in effetti Selectmanca, per ora l'ho appena sostituito con i pulsanti di opzione, ma sono sicuro che non passerà molto tempo prima che la selezione venga trasferita dal trunk.
icc97

35

Dalla descrizione delle specifiche di progettazione del materiale :

Gli elenchi a griglia sono un'alternativa alle visualizzazioni elenco standard. Gli elenchi di griglie sono distinti dalle griglie utilizzate per i layout e altre presentazioni visive.

Se stai cercando una libreria di componenti Grid molto leggera, sto usando React-Flexbox-Grid , l'implementazione di flexboxgrid.cssin React.

Inoltre, React-Flexbox-Grid ha giocato bene sia con material-ui che con react-toolbox (l'implementazione alternativa del material design).


32
React-Flexbox-Grid è mal implementato al momento di questo post e richiede molte o molte dipendenze esterne per funzionare correttamente. Inoltre, @Roylee ne è lo sviluppatore ... quindi la sua opinione è comunque un po 'di parte;) ...
Cleanshooter

1
Inoltre, react-flexbox-grid dipende da flexboxgrid, che non utilizza gli stessi punti di interruzione reattivi consigliati in Material Design. Vedi: material.io/guidelines/layout/…
Ken Gregory,

@Cleanshooter sarebbe questa la tua versione concorrente ? Forse anche tu sei un po 'di parte :)
icc97

@ icc97 sì e no. Non avevo davvero intenzione di "competere", era più che altro uno stop gap per l'app che stavo creando. L'ho fatto dopo essere rimasto deluso da entrambi ... non importa più perché i ragazzi di CallEmAll hanno incluso un sistema a griglia nell'ultima versione di Material-UI. Tuttavia, non l'ho ancora provato personalmente. github.com/callemall/material-ui/pull/5808
Cleanshooter

1
@Cleanshooter il tuo sembrava piuttosto buono. Ho testato la nuova griglia Material-UI e finora funziona bene.
icc97

20

Mi sono guardato intorno per trovare una risposta e il modo migliore che ho trovato è stato quello di utilizzare Flex e lo styling in linea su diversi componenti.

Ad esempio, per fare in modo che due componenti di carta dividano il mio schermo intero in 2 componenti verticali (in rapporto 1: 4), il codice seguente funziona bene.

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

Ora, con alcuni calcoli in più, puoi facilmente dividere i tuoi componenti su una pagina.

Ulteriori letture su flex


2
Sono d'accordo, l'utilizzo delle proprietà flex css ha fornito la semplice formattazione di cui avevo bisogno.
James Gentes

11

Spero che non sia troppo tardi per dare una risposta.

Stavo anche cercando un bootstrap semplice, robusto, flessibile e altamente personalizzabile come il sistema React Grid da utilizzare nei miei progetti.

Il meglio che conosco è react-pure-grid https://www.npmjs.com/package/react-pure-grid

react-pure-grid ti dà il potere di personalizzare ogni aspetto del tuo sistema di rete, mentre allo stesso tempo ha impostazioni predefinite che probabilmente si adattano a qualsiasi progetto

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

8

Il modo in cui lo faccio è andare su http://getbootstrap.com/customize/ e selezionare solo "grid system" per il download. Ci sono bootstrap-theme.csse bootstrap.cssnei file scaricati e ho bisogno solo di quest'ultimo.

In questo modo, posso utilizzare il sistema a griglia di Bootstrap, con tutto il resto dell'interfaccia utente di Material.



5

Ho avuto difficoltà a trovare un framework UI che implementasse gli standard di Material Design per un comportamento reattivo, quindi ho creato due pacchetti che implementano un sistema a griglia per Material Design:

  1. Un framework CSS: material-responsive-grid
  2. Un insieme di React componenti che implementano tale quadro: reagire-materiale reattivo-griglia .

Questi pacchetti seguono gli standard per l' interfaccia utente reattiva delineati da Google. Tutte le dimensioni del riquadro di visualizzazione specificate nei loro standard sono supportate tenendo conto dei margini interni appropriati, del numero di colonne consigliato e persino del comportamento di un layout che supera i 1600 dp. Dovrebbe comportarsi come consigliato per ogni dispositivo nella guida Device Metrics .


1

Di seguito è realizzato dal sistema puramente MUI Grid ,

MUI - Layout a griglia

Con il codice sottostante,

// 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 ↓

Modifica il sistema MUI-Grid



0

Ecco un esempio di sistema a griglia con material-ui che è simile a 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.