플랙서블 박스 레이아웃에 대해 알아보자.

Flex box layout

flexible box layout은 그리드 레이아웃을 기본으로 하여 플랙스 박스를 원하는 위치에 배치하는 것이다. 여유 공간에 따라 너비나 높이, 위치를 자유롭게 변형할 수 있고 화면 크기에 따라 에이아수의 배치나 크기를 조절할 때 편하게 이용 가능하다는 장점이 있다.

flexbox

flexbox를 사용하기 위해서는 부모 요소의 display 속성을 flex로 만들어야 한다. 이를 flex-container라고 한다. (부모 요소가 inline이라면 inline-flex)

이 flex-container에 담기는 자식 요소들을 flex-item이라고 한다.

main-axis는 플렉스 항목을 배치하는 기본 방향으로 기본적으로는 왼쪽에서 오른쪽(수평)으로 배치된다. flex 항목의 배치가 시작하는 점을 main start(주축 시작점), 끝을 main end(주축 끝점)이라고 한다.

cross-axis는 주축과 교차되는 방향을 나타낸다. cross start(교차축 시작점, cross end(교차축 끝점)으로 표현한다.

더 자세히 알고 싶다면 w3c의 표준 documents를 보는 것이 좋다.

표준
  • 기본 속성
  • display 속성을 flex-container에 지정하기

flexible한 레이아웃을 만들기 위해서는 컨텐츠를 flex-container로 감싸 주어야 한다. 그 후 그 부모요소의 display값을 flex (inline 요소일 경우 inline-flex)로 만들어 주어야 한다.

주의할 점은 각 브라우저마다 지원 방법이 다르기 때문에 브라우저 접두사를 붙여주어야 한다는 것이다.

  • flex-direction : 플렉스 방향

이 속성은 배치를 row(가로)로 할지 column(세로)로 할지 결정하는 것이다. 기본 값은 row이다.

row(주축 가로, 교차축 세로 / 주축 시작 -> 끝), row-inverse(주축 가로, 교차축 세로 / 주축끝 -> 시작)
column(주축 세로, 교차축 가로 / 주축 시작 -> 끝), column-inverse(주축 세로, 교차축 가로 / 주축 끝 -> 시작)

  • flex-wrap : 항목을 한 줄 혹은 여러 줄로 배치하기

기본적으로는 주축을 따라 한 줄로 배치되지만 flex-wrap 속성을 통해 조절할 수 있다. no-wrap은 기본값으로 한 줄에 표시, wrap은 여러 줄에 표시, wrap-reverse는 여러 줄에 표시하지만 반대방향으로 배치하는 속성 값이다.

flex-wrap: wrap은 왼쪽에서 오른쪽으로 위에서 아래로 배치한다.

flex-wrap: wrap-reverse은 왼쪽에서 오른쪽이지만 아래에서 위 방향으로 배치한다.

  • flex-flow : flex-direction과 flex-wrap을 한꺼번에

귀찮으니깐 한 번에 표시하자!

flex-flox: row wrap;

이런식으로 쓰면 된다.

  • order : 배치 순서 바꾸기

flex 항목은 입력한 순서대로 주축을 따라 배치되는데, order 속성을 사용하면 배치를 바꿀 수 있다. order:0이면 그대로 하며 숫자값이 바뀔 때마다 그 순서에 따라 배치된다.

  • flex : 항목 크기 조절하기

플렉스 항목의 너비를 조절하는 속성이다.

flex-grow는 얼마나 늘일지, flex-shrink는 얼마나 줄일지, flex-basis는 기본 크기를 지정하는 속성값으로 0이나 auto를 지정한다.
initial은 항목의 width, height 값으로 결정하며 컨테이너 공간을 넘어갈 경우 최소 크기까지 줄인다.
auto는 항목의 width, height값으로 결정되지만 공간에 따라 늘이거나 줄일 수 있다.

예를 들어

flex: [<flex-grow> <flex-shrink> <flex-basis>] | auto | initial
flex : 2 2 0;

으로 설정하면 2배 늘이거나 2배 줄인다는 의미이다.

  • flex 항목 배치 속성들
  • justify-content : 주축 기준의 배치 방법 지정

이 속성은 flex 항목을 주축 방향으로 배치할 때의 배치 기준을 지정할 수 있다.

flex-start는 주축의 시작점을 기준으로 배치한다.
flex-end는 주축의 끝 점을 기준으로 배치한다.
center는 주축의 중앙을 기준으로 배치한다.
space-between은 첫 번째 flex 항목과 마지막 flex 항목을 시작점과 끝점에 배치한 후 가운데 항목들을 같은 간격으로 배치한다.
space-around는 모든 플렉스 항목들을 같은 간격으로 배치한다.

  • align-items, align-self : 교차축 기준의 배치

교차축으로 배치 방법을 조절할 수 있다.

align-items 속성들

stretch : flex 항목을 확장하여 교차축을 꽉 채운다. (기본값)
flex-start: 교차축의 시작점을 기준으로 배치한다.
flex-end : 교차축의 끝점을 기준으로 배치한다.
center: 교차축의 중앙을 기준으로 배치한다.
baseline: 시작점과 글자 기준선이 가장 먼 flex 항목을 시작점에 배치한다. 그리고 그 글자의 기준선과 다른 항목의 기준선을 맞춰 배치한다. (예시로 보는게 빠릅니다.)

align-self 속성들

align-self는 각 flex 항목들을 개별적으로 배치할 수 있다. 속성값들은 위와 같지만 auto 속성이 추가된다.

위 예제는 align-items 항목을 center로 지정한 후 box1 항목만 align-self를 flex-start로 지정했다.

  • align-content : 여러 줄일 때의 배치 방법

flex 항목이 여러 줄에 표시될 때 align-content 속성을 사용하면 교차축 방향 배치방법을 정할 수 있다. 속성값은 justify-contetn와 같다.

  • 예제

(이미지는 찾아서 넣으시면 됩니다. 솔로라서 슬픈데 이런 예제를…)