CSS의 flex는 엘리먼트들의 크기, 위치를 쉽게 잡아주고 많은 레이아웃 작업을 쉽게 만들어주는 도구이다.
flexbox로 레이아웃을 구성하기 위해서는, 먼저 어떤 요소들을 flexbox 레이아웃 요소들로 구성할지 선택해야 한다. flexbox 레이아웃의 영향을 주고 싶은 요소의 부모 요소에 display: flex 값을 지정해줘야 한다.
기본적으로 flexbox 레이아웃을 구성하기 위해서는 아래와 같이 복수의 자식 요소인 flex item과 상위 부모 요소인 flex container로 구성된다.
flex-direction
item들의 행, 열 방향을 나타낸다. 값으로는 row, column, row-reverse, column-reverse이 있다.
row(default)
column
row-reverse
column-reverse
flex-wrap
item들의 너비의 합이 flex container 너비를 초과할 때 어떻게 처리할지를 결정하는 속성이다. 값으로는 nowrap(줄바꿈 안함), wrap(줄바꿈), wrap-reverse(역 줄바꿈)이 있다.
nowrap(default)
wrap
wrap-reverse
justify-content
item과 container간에 수평방향으로 여백을 주는 방식을 지정한다. 값으로는 flex-start, flex-end, center, space-between, space-around이 있다.
flex-start(default) - 요소들을 컨테이너의 왼쪽으로 정렬한다.
flex-end - 요소들을 컨테이너의 오른쪽으로 정렬한다.
center - 요소들을 컨테이너의 중앙으로 정렬한다.
space-between - 요소들을 사이에 동일한 간격을 둔다.
space-around - 요소들을 감싼 둘레에 동일한 간격을 둔다.
align-items
item과 container간에 수직방향으로 여백을 주는 방식을 지정한다. 값으로는 flex-start, flex-end, center, stretch가 있다.
flex-start(default) - 교차축의 앞부터 요소를 배치한다.
flex-end - 교차축의 끝부터 요소를 배치한다.
center - 교차축의 중간에 요소를 배치한다.
stretch - 교차축의 양끝 기준 상하로 쭉 늘어난다.
align-content
item들을 한 줄에 다 표시할 수 없어서 다음 줄로 넘김이 발생했을 때 줄 사이에 여백을 결정하는 속성이다. 이것은 flex-wrap: wrap 줄 바꿈 속성을 필수로 지정해줘야 한다. 값으로는 flex-start, flex-end, center, space-between, space-around, stretch가 있다.
이 외에도 flexbox를 사용하는 속성들이 많지만, 필자가 주로 사용하는 속성들을 기준으로 정리했다.
브라우저 호환성
flexbox 지원은 파이어폭스, 크롬, 오페라, 엣지, IE11, 안드로이드 및 iOS 최신 버전 등 대부분의 신형 브라우저에서 사용 할 수 있습니다. 하지만, 구형 브라우저에는 여전히 flexbox를 지원하지 않습니다. flexbox 기능을 지원하지 않을 경우 레이아웃이 완전히 깨져서 사용할 수 없게 됩니다. 그래서 Flexbox를 디자인의 기본 레이아웃 메서드를 사용할 것을 권고하고 있다.