Materialny interfejs użytkownika i system siatki


118

Bawię się trochę z Material-UI . Czy są jakieś opcje tworzenia układu siatki (jak w Bootstrap )?

Jeśli nie, w jaki sposób można dodać tę funkcjonalność?

Istnieje składnik GridList, ale wydaje mi się, że ma on inny cel.


Nie myśl, że ma jakieś komponenty do tworzenia responsywnych siatek.
— Lucky Chingi

Odpowiedzi:


126

Material UI zaimplementował własny układ Flexbox za pośrednictwem komponentu Grid .

Wygląda na to, że początkowo chcieli pozostać czysto biblioteką „komponentów”. Ale jeden z głównych programistów zdecydował, że zbyt ważne jest, aby nie mieć własnego . Został teraz włączony do podstawowego kodu i został wydany w wersji 1.0.0 .

Możesz go zainstalować przez:

npm install @material-ui/core

Jest teraz w oficjalnej dokumentacji z przykładami kodu .


Widzę, że opublikowałeś odpowiedź, którą właśnie zamierzałem dodać! lol. właśnie odpowiedział na Twój komentarz dotyczący aktualnej wiodącej odpowiedzi.
— Cleanshooter

Właśnie zainstalowałem i teraz używasz gałęzi alfa Material UI. Potwierdza, że ​​system Layout działa dobrze.
— user2875289

3
System grid działa dobrze, ale jest kilka komponentów, które nie zostały jeszcze zaimplementowane, takie jak Select Field. Utknąłem na tym, jak wykorzystać takie pola. Czy możesz mi w tym pomóc?
— Suresh Mainali

1
Zgadzam się z @SureshMainali, ponieważ mam te same problemy. Większość komponentów ma brakujące rekwizyty, a nawet jeśli chodzi o implementację niestandardowego motywu
— Sai Ram

@SaiRam Nie powiedziałbym większości, ale faktycznie Selectbrakuje, właśnie zastąpiłem go przyciskami radiowymi na razie, ale jestem pewien, że nie potrwa to długo, zanim selekcja zostanie przeniesiona z trunk.
— icc97

35

Z opisu specyfikacji projektu materiału :

Listy siatek są alternatywą dla standardowych widoków list. Listy siatek różnią się od siatek używanych do układów i innych prezentacji wizualnych.

Jeśli szukasz dużo lekkiej biblioteki komponentów Grid, używam React-Flexbox-Grid , implementacji flexboxgrid.cssw React.

Co więcej, React-Flexbox-Grid dobrze grał zarówno z interfejsem materiału , jak i React- toolbox (alternatywna implementacja Material Design).


32
React-Flexbox-Grid jest słabo zaimplementowany w momencie pisania tego posta i wymaga wielu zewnętrznych zależności, aby działać poprawnie. Poza tym @Roylee jest jego twórcą ... więc jego opinia i tak jest nieco stronnicza;) ...
— Cleanshooter

1
Ponadto, react-flexbox-grid zależy od flexboxgrid, który nie używa tych samych responsywnych punktów przerwania zalecanych w Material Design. Zobacz: material.io/guidelines/layout/…
— Ken Gregory,

@Cleanshooter czy to byłaby Twoja konkurencyjna wersja ? Być może też jesteś trochę stronniczy :)
— icc97

@ icc97 tak i nie. Tak naprawdę nie zamierzałem „konkurować”, to była raczej przerwa w tworzeniu aplikacji. Zrobiłem to po rozczarowaniu oboma ... to już naprawdę nie ma znaczenia, ponieważ chłopaki z CallEmAll włączyli system grid w najnowszym wydaniu Material-UI. Jednak nie próbowałem tego jeszcze osobiście. github.com/callemall/material-ui/pull/5808
— Cleanshooter

1
@Cleanshooter Twój wyglądał całkiem nieźle. Testowałem nową siatkę Material-UI i jak na razie działa dobrze.
— icc97

20

Rozejrzałem się za odpowiedzią na to pytanie i najlepszym sposobem, jaki znalazłem, było użycie Flex i stylizacji inline na różnych komponentach.

Na przykład, aby podzielić mój pełny ekran na 2 pionowe komponenty (w stosunku 1: 4), następujący kod działa dobrze.

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

Teraz, wykonując więcej obliczeń, możesz łatwo podzielić komponenty na stronie.

Dalsze czytanie na flex


2
Zgadzam się, użycie właściwości flex css zapewniło proste formatowanie, którego potrzebowałem.
— James Gentes,

11

Mam nadzieję, że nie jest za późno na udzielenie odpowiedzi.

Szukałem również prostego, solidnego, elastycznego i wysoce konfigurowalnego systemu bootstrap, takiego jak React Grid, do wykorzystania w moich projektach.

Najlepsze, co wiem, to react-pure-grid https://www.npmjs.com/package/react-pure-grid

react-pure-grid daje możliwość dostosowania każdego aspektu systemu sieci, a jednocześnie ma wbudowane ustawienia domyślne, które prawdopodobnie pasują do każdego projektu

Stosowanie

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

Po prostu idę na http://getbootstrap.com/customize/ i sprawdzam tylko „grid system”, aby pobrać. Są bootstrap-theme.cssi bootstrap.cssw pobranych plikach, a ja potrzebuję tylko tego drugiego.

W ten sposób mogę korzystać z systemu grid w Bootstrap, ze wszystkim innym z Material UI.



5

Miałem trudności ze znalezieniem frameworka interfejsu użytkownika, który implementowałby standardy Material Design dotyczące responsywnego zachowania, więc stworzyłem dwa pakiety, które implementują system siatki dla Material Design:

  1. Struktura CSS: siatka reagująca na materiały
  2. Zestaw komponentów React, które implementują ten szkielet: reagująca-materiał-reagująca-siatka .

Te pakiety są zgodne ze standardami responsywnego interfejsu użytkownika określonymi przez Google. Wszystkie rozmiary rzutni określone w ich standardach są obsługiwane z uwzględnieniem odpowiednich rynien, zalecanej liczby kolumn, a nawet zachowania układu przekraczającego 1600 dp. Powinien zachowywać się zgodnie z zaleceniami dla każdego urządzenia w przewodniku Metryki urządzeń .


1

Poniżej jest wykonany wyłącznie przez system MUI Grid ,

MUI - układ siatki

Za pomocą poniższego kodu

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

↓ KodSandbox ↓

Edytuj system MUI-Grid



0

Oto przykład systemu grid z material-ui, który jest podobny do 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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.