Skip to content

flex

기본적으로 컨텐츠 기반의 가로폭 그리고 부모 기준의 세로폭을 가지는 레이아웃을 의미한다.

flex 구조

  • 컨테이너와 아이템으로 나눠짐.
  • 컨테이너와 아이템에 적용 할 수 있는 속성이 다르다.

컨테이너

- display: flex | inline-flex
- flex-direction: row | column | row-reverse | column-reverse
- flex-wrap: nowrap | wrap | wrap-reverse
- flex-flow: <flex-direction> <flex-wrap>
- justify-content:
    flex-start | flex-end | center |
    space-between | space-around | space-evenly
- align-items: stretch | flex-start | flex-end | center | baseline
- align-content: // flex-wrap: wrap 설정된 상태일 때 사용.
    stretch | flex-start | flex-end | center |
    space-between | space-around | space-evenly

아이템

// flex 박스의 기본 크기 설정
- flex-basis: auto | 단위(0 | 50% | 300px | 10rem) | content

// flex-basis 보다 커질 수 있는지 설정
- flex-grow: 0 | 숫자

// flex-basic 보다 작아질 수 있는지 설정
- flex-shrink: 1 | 숫자
- flex: <flex-grow> <flex-shrink> <flex-basis>

// 수직축 정렬
- align-self: auto | stretch | flex-start | flex-end | center | baseline
- order: 숫자

sample

html
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    * {
      box-sizing: border-box;
    }
    html, body {
      width: 100%;
      height: 100%;
      margin: 0;
    }
    .border {
      border: 1px solid #ccc;
    }
    #container {
      display: flex;
      flex-direction: row;
      width: 100%;
      height: 100%;
    }
    #snb {
      flex-basis: 150px;
    }
    #wrapper {
      flex-grow: 1;
      display: flex;
      flex-direction: column;
    }
    #gnb {
      height: 100px;
    }
    #content {
      flex-grow: 1;
      display: flex;
      flex-direction: row;
      flex-wrap: wrap;
      overflow-y: auto;
    }
    .box {
      flex-basis: 50%;

      display: flex;
      padding: 15px;
    }
    .box > div {
      flex-grow: 1;
      max-width: 400px;
      height: 100%;
      min-height: 500px;
      margin: auto;
    }
  </style>
</head>
<body>
<div id="container">
  <div id="snb" class="border">SNB</div>
  <div id="wrapper">
    <div id="gnb" class="border">GNB</div>
    <div id="content" class="border">
      <div class="box">
        <div class="border">1</div>
      </div>
      <div class="box">
        <div class="border">2</div>
      </div>
      <div class="box">
        <div class="border">3</div>
      </div>
      <div class="box">
        <div class="border">4</div>
      </div>
    </div>
  </div>
</div>
</body>
</html>