Material UI und Grid System

118

Ich spiele ein bisschen mit Material-UI . Gibt es Optionen zum Erstellen eines Rasterlayouts (wie in Bootstrap )?

Wenn nicht, wie kann diese Funktionalität hinzugefügt werden?

Es gibt eine GridList-Komponente, aber ich denke, sie hat einen anderen Zweck.

kharandziuk
quelle
Denken Sie nicht, dass es irgendwelche Komponenten hat, um reaktionsschnelle Gitter zu erstellen.
Lucky Chingi
Die Antwort ist hier github.com/callemall/material-ui/issues/190
kharandziuk

Antworten:

126

Die Material-Benutzeroberfläche hat über die Grid-Komponente ein eigenes Flexbox-Layout implementiert .

Es scheint, dass sie sich ursprünglich als reine "Komponenten" -Bibliothek behalten wollten . Einer der Hauptentwickler entschied jedoch, dass es zu wichtig sei, keine eigenen zu haben . Es wurde nun in den Kerncode integriert und mit v1.0.0 veröffentlicht .

Sie können es installieren über:

npm install @material-ui/core

Es ist jetzt in der offiziellen Dokumentation mit Codebeispielen .

icc97
quelle
Ich sehe, Sie haben die Antwort gepostet, die ich gerade hinzufügen wollte! lol. Ich habe gerade auf Ihren Kommentar zur aktuellen Leitantwort geantwortet.
Cleanshooter
Einfach installiert und jetzt den Alpha-Zweig der Material-Benutzeroberfläche verwenden. Kann bestätigen, dass das Layout-System gut funktioniert.
user2875289
3
Das Rastersystem funktioniert gut, aber es gibt einige Komponenten, die noch nicht implementiert wurden, wie z Select Field. Ich bin nicht sicher, wie ich solche Felder verwenden soll. Kannst du mir dabei helfen?
Suresh Mainali
1
Ich stimme @SureshMainali zu, da ich auch vor den gleichen Problemen stehe. Die meisten Komponenten haben fehlende Requisiten und sogar in Bezug auf die Implementierung des benutzerdefinierten Themas
Sai Ram
@SaiRam Ich würde nicht das meiste sagen, aber tatsächlich Selectfehlt das, ich habe es gerade durch Optionsfelder ersetzt, aber ich bin sicher, es wird nicht lange dauern, bis die Auswahl vom Trunk portiert wird.
icc97
35

Aus der Beschreibung der Materialdesignspezifikationen :

Rasterlisten sind eine Alternative zu Standardlistenansichten. Gitterlisten unterscheiden sich von Gittern, die für Layouts und andere visuelle Präsentationen verwendet werden.

Wenn Sie nach einer sehr einfachen Grid-Komponentenbibliothek suchen, verwende ich React-Flexbox-Grid , die Implementierung von flexboxgrid.cssin React.

Hinzu kommt, dass, React-Flexbox-Grid gut mit sowohl gespielt Material-ui und reagiert-Toolbox (die alternative Material - Design - Implementierung).

Roy Lee
quelle
32
React-Flexbox-Grid ist zum Zeitpunkt dieses Beitrags schlecht implementiert und erfordert viel zu viele externe Abhängigkeiten, um ordnungsgemäß zu funktionieren. Außerdem ist @Roylee der Entwickler davon ... also ist seine Meinung sowieso ein bisschen voreingenommen;) ...
Cleanshooter
1
React-Flexbox-Grid hängt auch vom Flexboxgrid ab, das nicht die gleichen reaktionsfähigen Haltepunkte verwendet, die in Material Design empfohlen werden. Siehe: material.io/guidelines/layout/…
Ken Gregory
@Cleanshooter wäre dies Ihre Konkurrenzversion ? Vielleicht bist du auch ein bisschen voreingenommen :)
icc97
@ icc97 ja und nein. Ich wollte nicht wirklich "konkurrieren", es war eher eine Lücke für die App, die ich baute. Ich habe das gemacht, nachdem ich von beiden enttäuscht war ... es spielt jedoch keine Rolle mehr, da die Jungs von CallEmAll ein Grid-System in die neueste Version von Material-UI aufgenommen haben. Ich habe es aber noch nicht persönlich ausprobiert. github.com/callemall/material-ui/pull/5808
Cleanshooter
1
@Cleanshooter deines sah ziemlich gut aus. Ich habe das neue Material-UI-Raster getestet und es funktioniert bisher gut.
icc97
20

Ich sah mich nach einer Antwort darauf um und fand am besten Flex und Inline-Styling für verschiedene Komponenten.

Wenn beispielsweise zwei Papierkomponenten meinen Vollbildmodus in zwei vertikale Komponenten (im Verhältnis 1: 4) aufteilen, funktioniert der folgende Code einwandfrei.

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

Mit einigen weiteren Berechnungen können Sie Ihre Komponenten jetzt einfach auf einer Seite unterteilen.

Weiterführende Literatur zu flex

shobhit1
quelle
2
Ich bin damit einverstanden, dass die Verwendung von Flex-CSS-Eigenschaften die einfache Formatierung lieferte, die ich benötigte.
James Gentes
11

Ich hoffe, das ist nicht zu spät, um eine Antwort zu geben.

Ich suchte auch nach einem einfachen, robusten, flexiblen und hochgradig anpassbaren Bootstrap-ähnlichen React-Grid-System für meine Projekte.

Das Beste, was ich weiß, ist react-pure-grid https://www.npmjs.com/package/react-pure-grid

react-pure-grid Sie haben die Möglichkeit, jeden Aspekt Ihres Grid-Systems anzupassen, während gleichzeitig Standardeinstellungen eingebaut sind, die wahrscheinlich für jedes Projekt geeignet sind

Verwendung

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
quelle
8

Ich gehe zu http://getbootstrap.com/customize/ und überprüfe nur "Grid System" zum Herunterladen. Es gibt bootstrap-theme.cssund bootstrap.cssin heruntergeladenen Dateien, und ich brauche nur letztere.

Auf diese Weise kann ich das Rastersystem von Bootstrap mit allem anderen aus der Material-Benutzeroberfläche verwenden.

6324
quelle
5

Ich verwende nur https://react-bootstrap.github.io/ für Responsive Layout und Material-UI für alle Komponenten

Yuchien
quelle
3
Ich denke, es ist ein bisschen schwer :) Gibt es eine Möglichkeit, nur gitterbezogene Stile einzuschließen?
Kharandziuk
2
Die Verwendung von React-Bootstrap muss also weiterhin die relevante CSS-Datei enthalten. Unter getbootstrap.com/customize können Sie das Grid-System so anpassen, dass es nur eine minimierte Version davon enthält ~
yuchien
5

Ich hatte Schwierigkeiten, ein UI-Framework zu finden, das die Standards von Material Design für reaktionsschnelles Verhalten implementiert. Daher habe ich zwei Pakete erstellt, die ein Rastersystem für Material Design implementieren:

  1. Ein CSS-Framework: Material-Responsive-Grid
  2. Eine Reihe von React-Komponenten, die dieses Framework implementieren: React -Material-Responsive-Grid .

Diese Pakete folgen den von Google festgelegten Standards für reaktionsschnelle Benutzeroberflächen . Alle in ihren Standards angegebenen Ansichtsfenstergrößen werden unter Berücksichtigung der richtigen Dachrinnen, der empfohlenen Anzahl von Spalten und sogar des Verhaltens eines Layouts mit mehr als 1600 dp unterstützt. Es sollte sich wie für jedes Gerät im Gerätemetrikhandbuch empfohlen verhalten .

Ken Gregory
quelle
1

Unten wird von rein MUI Grid System gemacht ,

MUI - Rasterlayout

Mit dem Code unten,

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

Bearbeiten Sie das MUI-Grid-System

Hasan Sefa Ozalp
quelle
0

Hier ist ein Beispiel für ein Rastersystem mit material-ui, das dem Bootstrap ähnelt:

<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
quelle