[CSS3] 4. flexbox

flexbox


flexbox는 모던 웹을 위하여 제안된 기존 layout 보다 더 세련된 방식의 니즈에 부합하기 위한 CSS3 의 새로운 layout 방식입니다.
요소의 사이즈가 불명확하거나 동적으로 변화할 때에도 유연한 레이아웃을 실현할 수 있습니다.
복잡한 레이아웃이라도 적은 코드로 보다 간단하게 표현할 수 있는 장점이 있습니다.

예전에는 몇몇 브라우저에서만 작동하였지만 현재는 많은 브라우저들이 flexbox layout 을 지원하고 있습니다.
flexbox 에 대해 공부하기 전에 간단한 레이아웃을 만들었습니다.

<!DOCTYPE html>

<html>
    <head>
        <style>
            .flex-box {
                background: palegreen;
                width: 460px;
            }

            .flex-item {
                background: salmon;
                padding: 20px;
                margin: 10px;
                color: #fff;
                border-radius: 7px;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <div class="flex-box">
            <div class="flex-item">One</div>
            <div class="flex-item">Two</div>
            <div class="flex-item">Three</div>
            <div class="flex-item">Four</div>
            <div class="flex-item">Five</div>
        </div>
    </body>
</html>


div 는 block 요소의 성질이므로 수직 정렬됩니다.
수평 정렬을 하기 위해서는 자식 요소에 display:inline-block;을 선언하거나 float:left;를 지정해야했습니다.
이렇게 수평 정렬을 하면 부모 요소 내에서 각 자식의 요소의 너비를 다시 지정하는 등..
번거로운 처리가 필요했는데 flexbox 를 이용하면 간단하게 부모 요소내에서
자식요소의 수평 정렬이 가능합니다.

.flex-box {
  display: flex;
  justify-content: space-around;
  background: palegreen;
  width: 460px;
}

부모 요소에 display:flex;justify-content: space-around;
기존 코드에 단 두 줄의 코드를 추가했을 뿐인데 원하는 대로 수평 정렬을 시켰습니다.
이처럼 flexbox 는 기존에 방식에 비해 매우 간단히 레이아웃을 처리할 수 있습니다.
원리는 부모 요소에 display:flex를 지정하면서 부모 요소는 flex-container 가 되고
자식 요소는 자동적으로 flex-item 이 됨으로부모 요소(flex-container)에서
콘텐츠 조정(justify-content)을 통해 자식 요소(flex-item)가 정렬 되는 것입니다.



flexbox 의 장점




flexbox container 속성


flexbox item 속성


float, clear, vertical-align 속성은 flex-item 에 영향을 주지 않습니다.



2. Today I Found Out

어제 Grid에 이어 Flex까지 float를 이용하여 배치를 하다가 새로운 기술들을
사용하니 얼마나 편리한지 실감할 수 있었습니다.
물론 다양한 브라우저에서 보편화가 되고 문제없이 작동할려면 시간이 걸리겠지만
그래도 점점 기술들이 웹 개발에 있어 생산성을 높여주는 것 같아 좋았습니다.



3. refer

https://developer.mozilla.org/en-US/docs/Web/CSS/flex

https://www.w3schools.com/cssref/css3_pr_flex.asp

http://poiemaweb.com/