본문 바로가기
개발 관련 지식/CSS

CSS - flex

by 권태일1147 2020. 3. 12.

display : flex;

elements를 정렬하는데 사용된다. 기존의 table 태그로 정렬하면 불편한 것이 많았기에 개발된 것.

 

flex를 사용하기 위해서는 태그가 두단계가 필요하다. ex) ul과 li 처럼

<container>
  <item></item>
  <item></item>
</container>
container에 부여할 수 있는 속성 item에 부여할 수 있는 속성

display

flex-direction

flex-wrap

flex-flow

justify-content

align-items

align-content

order

flex-grow

flex-shrink

flex-basis

flex

align-self

 

 

flex의 기본

부모 자식간의 element 구조

부모 element의 display: flex;

<head>
    <style>
        .container{
            background-color: powderblue;
            height:200px;
            display:flex; /* 기본적으로 flex-direction으로 정해진 방향의 화면 전체를 사용한다. */
            flex-direction:row;  /* 기본값 default row이고, row-reverse, column, column-reverse가 있음. 부모 element의 시작 지점을 바꾼다. */
        }
        .item{
            background-color: tomato;
            color:white;
            border:1px solid white;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
    </div>
</body>
</html>

 

 

 

 

flex 부모 element 속성

flex-direction : 부모 element의 시작 지점을 바꾼다.

flex-direction : row-reverse

 

 

flex-direction : column-reverse

기본적으로 flex-direction으로 정해진 방향으로 화면 전체를 사용한다.

 

 

 

 

 

 

 

 

 

align-items : (flex-direction이 row일 때) item들을 수직으로 정렬한다. flex-start(item을 content 크기로 위에 붙임), flex-end, center, stretch(부모 element 크기에 맞춰 쫙 편다), baseline

 

justify-content : (flex-direction의 방향을 기준으로) item들을 수평방향으로 정렬한다. flex-start, flex-end, space-between, center, space-around

 

 

 

flex 자식 element 속성

align-self : 자식들 중 하나만 수직 방향의 다른 배치로 둘 수 있음.

                  auto, flex-start, flex-end, center, baseline, stretch

 

flex-basis : item의 기본 사이즈를 정한다.

 

flex-grow : 부모 element의 여백을 자식 element들이 나눠가질 수 있다.

                   ex) items이 5개 있는데 모두 flex-grow가 1이면 공평하게 나눠갖는다.

                   items이 5개 인데 하나만 flex-grow가 3이고 나머지는 1이라면 3/7, 1/7, 1/7, 1/7, 1/7 사이즈로 나눠 갖는다.

<html>
<head>
    <style>
        .container{
            width: 400px;
            background-color: powderblue;
            height:200px;
            display:flex;
            flex-direction:row;
        }
        .item{
            background-color: blueviolet;
            color:white;
            border:1px solid white;   
            flex-grow: 1; /* item들이 부모 element의 여백을 공평하게 나눠서 차지한다. default 0 */
        }
        .item:nth-child(2){
            flex-grow: 5; /* 부모 element의 5/9을 차지한다.  flex-grow의 총합이 9 */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
    </div>
</body>
</html>

 

 

flex-shrink : 화면의 사이즈가 줄어들 때, items가 같이 줄어드는 정도를 설정한다. default 1

<html>
<head>
  <style>
      .container{
          background-color: powderblue;
          height:200px;
          display:flex;
          flex-direction:row;
      }
      .item{
          background-color: violet;
          color:white;
          border:1px solid white;   
          flex-basis: 200px;   
          flex-shrink: 0;   
      }
      .item:nth-child(1){
        background-color: red;
          flex-shrink: 1;
      }
      .item:nth-child(2){
        background-color: blue;
          flex-shrink: 2;   /* flex-shrink의 총 합이 3이기 때문에 item1은 1/3만큼 줄어들고, item2는 2/3만큼 더 많이 줄어든다. */
      }
  </style>
</head>
<body>
  <div class="container">
      <div class="item">1</div>
      <div class="item">2</div>
      <div class="item">3</div>
      <div class="item">4</div>
      <div class="item">5</div>
  </div>
</body>
</html>

item의 사이즈가 줄어들지 않았을 때

 

item의 사이즈가 줄어들었을 때

 

 

order : items의 순서를 바꿀수 있다. default 0

각 item들에 order를 -1, 0, 1, 2, …. 로 주면 코드 상으로 앞에 있는 element를 화면상에서 순서를 바꿔서 보여줄 수 있다.

<html>
<head>
  <style>
      .container{
          background-color: powderblue;
          height:200px;
          display:flex;
          flex-direction:row;
      }
      .item{
          background-color: violet;
          color:white;
          border:1px solid white;   
          flex-basis: 200px;   
        
      }
      .item:nth-child(1){
        background-color: red;
        order: 1;
      }
      .item:nth-child(2){
        background-color: blue;
        order: -1;
      }
      .item:nth-child(3){
        order: 2;
      }
  </style>
</head>
<body>
  <div class="container">
      <div class="item">1</div>
      <div class="item">2</div>
      <div class="item">3</div>
      <div class="item">4</div>
      <div class="item">5</div>
  </div>
</body>
</html>

'개발 관련 지식 > CSS' 카테고리의 다른 글

CSS - float  (0) 2020.03.13
CSS - 미디어쿼리  (0) 2020.03.12
CSS - position : static, relative, absolute, fixed  (0) 2020.03.12
마진 겹침 현상(margin-collapsing)  (0) 2020.03.12
CSS - box-sizing  (0) 2020.03.11