머티리얼 UI 및 그리드 시스템


118

Material-UI 로 약간 놀고 있습니다. 그리드 레이아웃을 만드는 옵션이 있습니까 (예 : Bootstrap )?

그렇지 않은 경우이 기능을 추가하는 방법은 무엇입니까?

거기에있다 GridList 구성 요소는 하지만 난 그게 어떤 다른 목적을 가지고 같아요.


반응 형 그리드를 만드는 구성 요소가 있다고 생각하지 마십시오.
Lucky Chingi 2015

답변:


126

머티리얼 UI는 Grid 컴포넌트 를 통해 자체 Flexbox 레이아웃을 구현했습니다 .

처음에는 순전히 '구성 요소'라이브러리로 유지 하기원했던 것 같습니다 . 그러나 핵심 개발자 중 한 명이 자신의 . 이제 핵심 코드병합되었으며 v1.0.0 으로 출시되었습니다 .

다음을 통해 설치할 수 있습니다.

npm install @material-ui/core

이제 코드 예제와 함께 공식 문서에 있습니다 .


내가 추가하려고 한 답변을 게시 한 것을 봅니다! 롤. 현재 주요 답변에 대한 귀하의 의견에 응답했습니다.
Cleanshooter

이제 머티리얼 UI의 알파 브랜치를 설치하고 사용하고 있습니다. 레이아웃 시스템이 잘 작동하는지 확인할 수 있습니다.
user2875289 apr

3
그리드 시스템은 잘 작동하지만 아직 구현되지 않은 구성 요소가 있습니다 Select Field. 나는 그러한 필드를 사용하는 방법에 집착합니다. 이것을 통해 나를 도울 수 있습니까?
Suresh Mainali

1
나는 동일한 문제에 직면하고 있으므로 @SureshMainali에 동의합니다. 대부분의 구성 요소에는 누락 된 소품이 있으며 사용자 지정 테마 구현과 관련하여도 있습니다
Sai Ram

@SaiRam 나는 대부분을 말하지 않지만 실제로 Select는 누락되어 지금은 라디오 버튼으로 교체했지만 선택이 트렁크에서 포팅되기까지 오래 걸리지 않을 것이라고 확신합니다.
icc97

35

머티리얼 디자인 사양 설명에서 :

그리드 목록은 표준 목록보기의 대안입니다. 그리드 목록은 레이아웃 및 기타 시각적 표현에 사용되는 그리드와 다릅니다.

훨씬 가벼운 Grid 컴포넌트 라이브러리를 찾고 있다면 React 에서 구현 한 React-Flexbox-Grid 를 사용하고 flexboxgrid.css있습니다.

또한 React-Flexbox-Gridmaterial-uireact-toolbox (대체 머티리얼 디자인 구현) 모두와 잘 어울 렸습니다 .


32
React-Flexbox-Grid는이 게시물 당시 제대로 구현되지 않았으며 제대로 작동하려면 많은 외부 종속성이 필요합니다. 게다가 @Roylee는 개발자입니다 ... 그래서 그의 의견은 어쨌든 약간 편향되어 있습니다;) ...
Cleanshooter

1
또한 react-flexbox-grid는 머티리얼 디자인에서 권장하는 것과 동일한 반응 형 중단 점을 사용하지 않는 flexboxgrid에 의존합니다. 참조 : material.io/guidelines/layout/…
Ken Gregory

@Cleanshooter가 경쟁 버전이 될까요? 아마도 당신도 약간 편향되어있을 것입니다 :)
icc97

@ icc97 예 및 아니오. 실제로 "경쟁"하려는 의도가 아니었기 때문에 내가 구축하고있는 앱에 더 많은 스톱 갭이있었습니다. 나는 둘 다에 실망한 후에 그것을 만들었습니다 ... CallEmAll의 사람들이 Material-UI의 최신 릴리스에 그리드 시스템을 포함했기 때문에 더 이상 중요하지 않습니다. 나는 아직 개인적으로 그것을 시도하지 않았습니다. github.com/callemall/material-ui/pull/5808
Cleanshooter

1
@Cleanshooter 당신은 꽤 좋아 보였다. 나는 새로운 Material-UI 그리드를 테스트 해 왔으며 지금까지 잘 작동하고 있습니다.
icc97

20

나는 이것에 대한 답을 찾아 보았고 내가 찾은 가장 좋은 방법은 다양한 구성 요소에서 Flex와 인라인 스타일을 사용하는 것이 었습니다.

예를 들어 두 개의 종이 구성 요소가 전체 화면을 두 개의 수직 구성 요소 (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>
    )
  }
}

이제 더 많은 계산을 통해 페이지에서 구성 요소를 쉽게 나눌 수 있습니다.

플렉스에 대한 추가 읽기


2
나는 flex css 속성을 사용하여 필요한 간단한 형식을 제공했습니다.
James Gentes 2016-08-25

11

답변을 드리기에 너무 늦지 않았 으면합니다.

또한 프로젝트에서 사용할 리 액트 그리드 시스템과 같이 간단하고 강력하며 유연하며 고도로 사용자 정의 가능한 부트 스트랩을 찾고있었습니다.

내가 아는 가장 좋은 것은 react-pure-grid https://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>
);

8

내가하는 방법은 http://getbootstrap.com/customize/ 로 이동하여 "그리드 시스템"만 확인하여 다운로드하는 것입니다. 있다 bootstrap-theme.cssbootstrap.css다운로드 한 파일, 그리고 난 단지 후자가 필요합니다.

이런 식으로 Material UI의 다른 모든 것과 함께 Bootstrap의 그리드 시스템을 사용할 수 있습니다.


5

반응 형 레이아웃 에는 https://react-bootstrap.github.io/ 를 사용 하고 모든 구성 요소에는 Material-ui를 사용합니다.


3
약간 무거운 것 같아요 :) 그리드 관련 스타일 만 포함하는 방법이 있나요?
kharandziuk

2
따라서 React-Bootstrap을 사용하려면 관련 CSS 파일을 포함해야합니다. getbootstrap.com/customize 에서 그리드 시스템을 포함하고 축소 된 버전을 사용하도록 사용자 지정할 수 있습니다 ~
yuchien

5

반응 형 동작에 대한 Material Design의 표준을 구현하는 UI 프레임 워크를 찾기가 어려웠 기 때문에 Material Design을위한 그리드 시스템을 구현하는 두 개의 패키지를 만들었습니다.

  1. CSS 프레임 워크 : 재료 반응 형 그리드
  2. 프레임 워크를 구현하는 React 구성 요소 집합 : react-material-responsive-grid .

이러한 패키지 는 Google에서 설명하는 반응 형 UI 표준을 따릅니다 . 표준에 지정된 모든 뷰포트 크기는 적절한 거터, 권장되는 열 수 및 1600dp를 초과하는 레이아웃의 동작을 고려하여 지원됩니다. 장치 지표 가이드 의 모든 장치에 대해 권장되는대로 작동해야합니다 .


1

아래는 순전히 MUI Grid 시스템으로 만들어졌습니다 .

MUI-그리드 레이아웃

아래 코드를 사용하면

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

↓ 코드 샌드 박스 ↓

MUI-Grid 시스템 편집



0

다음은 부트 스트랩과 유사한 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.