[css] flext box

Published: by Creative Commons Licence

참고 사이트

MDN
MDN flexbox
MDN align-content 참고
드림코딩by엘리 - flexbox
css 연습
flexbox 개념

flex box

박스(container)와 아이템(item)에 적용할 수 있는 속성이 있다.

  • 박스 속성 : display, flex-direction, flex-wrap, flex-flow, justify-content, align-items, align-content
  • 아이템 속성 : order, flex-grow, flex-shrink, flex, align-self

중심축, 반대축 - 중심축에 따라 반대축이 수평 혹은 수직으로 바뀌기도 한다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel='stylesheet' href='/css/flex-box.css'/>
</head>
<body>
    <div class="container">
        <div class="item item1">1</div>
        <div class="item item2">2</div>
        <div class="item item3">3</div>
        <!-- <div class="item item4">4</div>
        <div class="item item5">5</div>
        <div class="item item6">6</div>
        <div class="item item7">7</div>
        <div class="item item8">8</div>
        <div class="item item9">9</div>
        <div class="item item10">10</div>
        <div class="item item1">1</div>
        <div class="item item2">2</div>
        <div class="item item3">3</div>
        <div class="item item4">4</div>
        <div class="item item5">5</div>
        <div class="item item6">6</div>
        <div class="item item7">7</div>
        <div class="item item8">8</div>
        <div class="item item9">9</div>
        <div class="item item10">10</div>
        <div class="item item1">1</div>
        <div class="item item2">2</div>
        <div class="item item3">3</div>
        <div class="item item4">4</div>
        <div class="item item5">5</div>
        <div class="item item6">6</div>
        <div class="item item7">7</div>
        <div class="item item8">8</div>
        <div class="item item9">9</div>
        <div class="item item10">10</div> -->
    </div>
</body>
</html>
.container {
    padding-top: 100px;
    background: beige;
    height: 100vh; /* 보이는 화면의 100%를 모두 사용하겠다.*/
    display: flex; /* item을 가로로 일렬로 붙여서 보여진다. 왼쪽부터 오른쪽으로 정렬*/

    /* flex-direction: row;       */
    /*
    flex-direction  중심축(아이템이 진행되는 방향)을 지정
    row(default): 화면의 왼쪽에서 오른쪽으로 아이템이 그려짐 (1,2,3 ~ 10)
    row-reverse : 화면의 오른쪽부터 왼쪽으로 아이템이 그려짐 (10,9,8~ 1)
    column :  수직으로 위부터 아래로   (1,2,3 ~ 10)
    column-reverse : 수직으로 아래부터 위로 (10,9,8~ 1)
    */

    /* flex-wrap: wrap; */
    /*
    flex-wrap 화면 기준으로 열이 더 많을 경우 줄바꿈을 한다.
    nowrap(default) : 줄바꿈 안한다.
    wrap : 화면의 폭에 맞춰 줄바꿈
    wrap-reverse : 아래부터 시작해서 위로 줄바꿈이 생긴다.
    */

    /* flex-flow: column nowrap;  */
    /* flex-direction + flex-wrap 한 속성 */

    /* justify-content: space-between; */
    /*
    justify-content 중심축에서 아이템을 어떻게 배치 할 것인지
    1) flex-direction: row; 인 경우       
        flex-start(default) : 순서는 html에 그려진 순서대로 왼쪽정렬 (1,2,3, ~ 10)
        flex-end : 순서는 html에 그려진 순서대로 오른쪽정렬(1,2,3, ~ 10)
        center : 행의 중간정렬
    2) flex-direction: column; 인 경우       
        flex-start(default) : 순서는 html에 그려진 순서대로 위쪽정렬  (1,2,3, ~ 10)
        flex-end : 순서는 html에 그려진 순서대로 아래쪽정렬 (1,2,3, ~ 10)
        center : 열의 중간정렬
    space-around : 아이템을 스페이스로 감싸는 것. 사이마다 간격을 준다. 첫번째, 마지막 아이템만 각 왼쪽 오른쪽이 하나의 스페이스로만 둘러져 폭이 좁다
    space-evenly : 모든 간격 동일하게
    space-between : 첫, 마지막 아이템은 화면에 딱 맞게 붙이고 나머지에는 사이 간격을 준다.
    */

    /* align-items : baseline; */
    /*
    align-items 반대축에서 아이템을 어떻게 배치 할 것인지
    center : 중앙정렬
    baseline : 아이템 내 텍스트가 모두 동일한 위치로 보일 수 있도록 배치
     e.g 아이템1의 padding: 40px 조건이 있어 다른 아이템과 차이가 있을때 아이템1의 텍스트 위치와 동일한 선상에 다른 아이템 텍스트를 보일 수 있도록 배치한다.
    */

    /* align-content:space-between; */
    /*
    align-content 반대축에서 아이템 배치
    center : 중앙
    space-between : 중간 줄의 아이템의 간격을 띄운다.?
    */
}

.item {
    width: 40px;
    height: 40px;
    border: 1px solid black;
}

.item1 {
    background: #ffcdd2;
    /* padding : 40px; */

    /* order: 2;  */
    /* order : 아이템의 순서를 변경하는데 사용, 실무에서 별로 사용하진 않음 */

    /* flex-grow: 2; */
    /*
    flex-grow  중요한 속성으로 컨테이너가 커졌을때 공간을 꽉 채우려는 속성이다.
    0: 아이템 자신의 크기만 유지
    1: 아이템 크기를 제외한 나머지 공간도 채우려고 한다. 다른 아이템과 비례해 1만큼 더 채운다. 만약 2가 되면 다른 아이템보다 2배로 더 공간을 차지한다.
    */

    /* flex-shrink: 2; */
    /*
    flex-grow  중요한 속성으로 컨테이너가 줄어들었을때 아이템을 줄이려는 속성이다.
    0: 아이템 자신의 크기만 유지
    1: 아이템 크기보다도 줄어드는데 비율대로 더 숫자가 클수록 더 많이 줄어든다.
    */

    /* flex-basis: 60%; */
    /*
    flex-basis  컨테이너의 크기 변경에 따라 공간을 차지하는데 더 세부적으로 세팅할 수 있다. flex-grow나 flex-shrink를 쓰지 않아도 이걸로 한번에 해결 가능
    */

    flex: 2 2 auto; /*grow, shrink, basis*/

    align-self: center; /*아이템별로 정렬 */
}
.item2 {
    background: #f8bbd0;
    /* order: 1; */
    /* flex-grow: 1;
    flex-shrink: 1; */
    /* flex-basis: 30%; */
}
.item3 {
    background: #e1bee7;   
    /* order: 3; */
    /* flex-grow: 1;
    flex-shrink: 1; */
    /* flex-basis: 10%; */
}
.item4 {
    background: #d1c4e9;
}
.item5 {
    background: #c5cae9;
}
.item6 {
    background: #bbdefb;
}
.item7 {
    background: #b3e5fc;
}
.item8 {
    background: #b2ebf2;
}
.item9 {
    background: #b2dfdb;
}
.item10 {    
    background: #c8e6c9;
}