Front-end/Material-UI

[Material-UI] 기초(2) - 컴포넌트 레이아웃(Container, Grid)

이안92 2021. 9. 8. 13:48
반응형

Material-UI에서 제공하는 컴포넌트의 종류는 도큐먼트들을 다 읽어보기 힘들 정도로 많다.

크게 Layout, Inputs, Navigation, Surfaces, Feedback, Data Display, Utils, Lab로 나눌 수 있고,

세부적으로 다 다루기보다 활용해서 적응할 수 있게끔 대표적인 예시를 들어가며 배우면 좋다.

 

 Layout

 

먼저, 레이아웃에는 Box, Container, Grid, Hidden, Image List가 있다. 

Box는 div를 대체하는 강력하고 편리한 컴포넌트로 tailwind CSS 방식이고

Container는 레이아웃을 잡을 때 좌우 간격, 중앙 위치시킬 때 사용하며

최대 너비 제한 fluid모드와 동일 너비 강제 fixed 모드가 있다.

Grid는 Container 안의 레이아웃을 핸들링해주고 반응형으로 배치시켜야 하는 경우 유용하다.

 

Container

Grid의 breakpoints는 총 5개로 이루어져 있다. xl, lg, md, sm, xs 

import React from 'react';
import { Grid, Box } from "@material-ui/core";
import { Container, Typography } from "@material-ui/core";
import { makeStyles } from "@material-ui/core/styles";

const useStyles = makeStyles((theme) => ({
  container: {
    background: theme.palette.warning.main,
  },
}));

export default () => {
  const classes = useStyles();
  return (
    <>
      <Container maxWidth="xl" className={classes.container}>
        <Typography variant="h6" color="primary">
          xl
        </Typography>
      </Container>
      <br />
      
      <Container maxWidth="lg" className={classes.container}>
        <Typography variant="h6" color="primary">
          lg
        </Typography>
      </Container>
      <br />
      
      <Container maxWidth="md" className={classes.container}>
        <Typography variant="h6" color="primary">
          md
        </Typography>
      </Container>
      <br />
      
      <Container maxWidth="sm" className={classes.container}>
        <Typography variant="h6" color="primary">
          sm
        </Typography>
      </Container>
      <br />
      
      <Container maxWidth="xs" className={classes.container}>
        <Typography variant="h6" color="primary">
          xs
        </Typography>
      </Container>
    </>
  );
}

 

그리고 fluid와 fixed모드로 나눌 수 있는데, fluid 모드는 fixed를 생략하면되고 fixed는 Container에 넣어주면 된다.

<Container fixed maxWidth="xl" className={classes.container}>
  <Typography variant="h6" color="primary">
    xl
  </Typography>
</Container>

<Container maxWidth="lg" className={classes.container}>
  <Typography variant="h6" color="primary">
    lg
  </Typography>
</Container>

 

fluid는 유동적으로 브라우저의 크기에 맞게 줄어들지만,

fixed는 해당 사이즈보다 브라우저 크기가 작아지면 xl->lg->md->sm->xs 순으로 줄어들게 된다.

 

Grid 

Material UI는 12열 격자(grid)로 이루어져 있고 각 브레이크포인트(breakpoint) 별로 각 셀이 몇 열을 차지할 것인지 정할 수 있다.

import React from 'react';
import { Grid, Box } from "@material-ui/core";

export default () => {
  return (
    <>
      <Grid container spacing={1}>
        <Grid item xs={12}>
          <Box bgcolor="primary.main" color="info.contrastText" p={2}>
            1
          </Box>
        </Grid>
        <Grid item xs={12} sm={6}>
          <Box bgcolor="warning.main" color="info.contrastText" p={2}>
            2
          </Box>
        </Grid>
        <Grid item xs={12} sm={6}>
          <Box bgcolor="warning.main" color="info.contrastText" p={2}>
            3
          </Box>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Box bgcolor="error.main" color="info.contrastText" p={2}>
            4
          </Box>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Box bgcolor="error.main" color="info.contrastText" p={2}>
            5
          </Box>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Box bgcolor="error.main" color="info.contrastText" p={2}>
            6
          </Box>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Box bgcolor="error.main" color="info.contrastText" p={2}>
            7
          </Box>
        </Grid>
      </Grid>
    </>
  );
}

브라우저의 크기가 줄어들면 아래와 같이 변경된다.

복수로 breakpoints를 지정해두면 브라우저 크기가 줄어들면 지정된 크기로 변화한다.

 

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

 

A Complete Guide to Flexbox

Our comprehensive guide to CSS flexbox layout. This complete guide explains everything about flexbox, focusing on all the different possible properties for the parent element (the flex container) and the child elements (the flex items). It also includes hi

css-tricks.com

참고로 flexbox는 위의 사이트에서 확인하면 쉽게 알아볼 수 있다.

반응형