반응형 웹 디자인을 구현하는 다른 방법은 '플렉스 박스(flex box)'를 이용한 플렉스 박스 레이아웃입니다. 미디어 쿼리를 사용해 반응형 레이아웃을 만들 때 CSS로 각 요소를 원하는 형태로 배치하려면 생각만큼 쉽지 않습니다.

 

플렉스 박스 레이아웃과 기본 속성들

플렉스 박스 레이아웃이란?

플렉스 박스 레이아웃(flex obx layout)이란 그리드 레이아웃을 기본으로 해 플렉스 박스를 원하는 위치에 배치하는 것입니다. 이 플렉스 박스를 이용하면 여유 공간에 따라 너비나 높이 위치를 자유롭게 변형할 수 있습니다. 따라서 화면 크기에 따라 레이아웃의 배치나 크기를 조절해야 편리하게 사용할 수 있습니다.

 

1. 플렉스 컨테이너(flex container) - 웹 문서에 텍스트나 이미지, 표 등 웹 요소들을 유연하게 사용하려면 먼저 플렉스 컨테이너로 묶어 주어야 합니다.

2. 플렉스 항목(flex item) - 플렉스 컨테이너에 담기는 웹 요소입니다. 위의 그림에서 1~6번 항목이 해당합니다.

3. 주축(main axis) - 플렉스 컨테이너 안에서 플렉스 항목을 배치하는 기본 방향입니다. 기본적으로 주축은 왼쪽에서 오른쪽으로 수평 방향으로 배치합니다. 주축에서 플렉스 항목이 배치되기 시작하는 지점을 '주축 시작점', 배치가 끝나는 지점을 '주축 끝점'이라고 합니다.

4. 교차축(cross axis) - 교차축은 주축과 교차되는 방향입니다. 기본적으로 위에서 아래로 배치합니다. 교차축에서 배치가 시작되는 지점을 '교차축 시작점' 배치가 끝나는 지점을 '교차축 끝점'이라고 합니다.

 

display 속성 - 플렉스 컨테이너 지정하기

플렉스 박스 레이아웃을 만들려면 먼저 웹 콘텐츠를 플렉스 컨테이너로 묶어 주어야 합니다. 즉, 배치하려는 웹 요소들이 있다면 그 요소들을 감싸는 부모 요소를 만들고 그 부모요소를 플렉스 컨테이너로 만들어야 합니다. 이때 특정 요소가 플렉스 컨테이너로 동작하려면 display 속성을 이용해 플렉스 박스 형태를 지정해야 합니다.

기본형 설명
display: flex | inline-flex 플렉스 박스 형태를 지정합니다.
속성 값 설명
flex 플렉스 박스를 박스 레벨 요소로 정의합니다.
inline-flex 플렉스 박스를 인라인 레벨 요소로 정의합니다.

 

display속성과 브라우저 접두사

플렉스 박스 레이아웃은 최신 모던 브라우저에서는 모두 지원되고 대부분의 구식 버전에서도 지원됩니다.

(http://caniuse.com/#feat=flexbox참고).

하지만 브라우저마다 플렉스 박스를 지원하는 방법이 달라 브라우저 접두사를 붙여야 합니다.

.wrapper {
    display:-webkit-box; /*iOS6이하, 사파리3.1*/
    display:-moz-box; /*파이어 폭스 19이하*/
    display:-ms-flexbox; /*IE 10*/
    display:-webkit-flex; /*웹킷 구 버전*/
    display: flex; /*표준 스펙*/
}

 

flex-direction속성 - 플렉스 방향 지정하기

플렉스 컨테이너를 지정했다면 플렉스 항목을 배치할 방향을 알려 주어야 합니다. flex-direction속성을 사용해 플렉스 항목의 주축을 가로(row)로 할지, 세로(column)로 할지 지정합니다. 따로 지정하지 않으면 기본 값인 row로 시작합니다

기본형 설명
flex-direction: row 주축을 가로로 교차축을 세로로 지정합니다. 플렉스 항목은 주축 시작점에서 끝점으로(왼쪽에서 오른쪽으로) 배치됩니다.
flex-direction: row-inverse 주축을 가로로 교차축을 세로로 지정합니다. 플렉스 항목은 주축 끝점에서 시작점으로(오른쪽에서 왼쪽으로) 배치됩니다.
flex-direction: column 주축을 세로로 교차축을 가로로 지정합니다. 플렉스 항목은 주축 시작점에서 끝점으로(위쪽에서 아래쪽으로) 배치됩니다.
flex-direction: column-inverse 주축을 세로로 교차축을 가로로 지정합니다. 플렉스 항목은 주축 끝점에서 시작점으로(아래쪽에서 위쪽으로)배치됩니다.

 

flex-wrap속성 - 플렉스 항목을 한 줄 또는 여러 줄로 배치하기

속성 값 설명
flex-wrap: no-wrap 플렉스 항목들을 한 줄에 표시합니다. 기본 값입니다.
flex-wrap: wrap 플렉스 항목을 여러 줄에 표시합니다.
flex-wrap: wrap-reverse 플렉스 항목을 여러 줄에 표시하되 기존 방향과 반대로 배치합니다.

 

flex-flow 속성 - 플렉스 방향과 여러 줄의 배치를 한꺼번에 지정하기

기본형 설명
flex-flow: <플렉스 방향> <플렉스 줄 배치> 기본값은 flex-flow:row no-wrap입니다.

 

order 속성 - 플렉스 항목 배치 순서 바꾸기

플렉스 항목은 소스 코드에 입력한 순서대로 주축을 따라 배치되지만 order 속성을 이용하면 배치 순서를 바꿀 수 있습니다. 

기본형 설명
order : 0 | 숫자 order값이 0이라면 소스에 입력한 순서대로 배치되고 order값을 숫자로 하면 그 순서에 따라 배치됩니다.

 

flex 속성 - 플렉스 항목 크기 조절하기

flex 속성은 플렉스 항목의 너비를 늘이거나 줄일 수 있도록 세 가지 값을 이용해 표시합니다.

첫 번째 숫자는 늘릴 비율, 두 번째 숫자는 줄일 비율, 세 번째 숫자는 기본 값입니다.

속성 값 설명
<flex-grow>
<flex-shrink>
<flex-basis>
첫번째 숫자 플렉스 항목의 너비를 얼마나 늘일지 숫자로 지정합니다.
두번째 숫자 플레스 항목의 너비를 얼마나 줄일지 숫자로 지정합니다.
플렉스 항목의 기본 크기를 지정합니다. width 속성처럼 너비 값을 지정할 수도 있고 0이나 auto를 지정할 수도 있습니다. 0일 경우, flex-grow와 flex-shrink의 인수 값을 함께 사용하고 auto일 경우, 플렉스 항목의 너비 값을 사용합니다.
initial 항목의 width/height값에 의해 크기가 결정되는데 플렉스 컨테이너의 공간이 부족할 경우, 최소 크기까지 줄입니다.
auto 항목의 width/height 값에 의해 크기가 결정되지만 플렉스 컨테이너 공간에 따라 늘이거나 줄입니다.
flex:1 1 0; /* 늘이거나 줄이지 않음*/
flex:2 2 0; /* 2배 늘이거나 2배 줄임*/

 

 

 

플렉스 박스 항목 배치를 위한 속성들

justify-content 속성 - 주축 기준의 배치 방법 지정하기

플렉스 항목을 주축방향으로 배치할 때의 배치 기준을 지정할 수 있습니다.

기본형 설명
justify-content: flex-start 주축의 시작점을 기준으로 배치합니다.
justify-content: flex-end 주축의 끝점을 기준으로 배치합니다.
justify-content: center 주축의 중앙을 기준으로 배치합니다.
justify-content: space-between 첫 번째 플렉스 항목과 마지막 플렉스 항목은 시작점과 끝점에 배치한 후 중앙 항목들은 같은 간격으로 배치합니다.
justify-content: space-around 모든 플렉스 항목들을 같은 간격으로 배치합니다.

 

align-item 속성 - 교차축 기준의 배치 방법 지정하기

기본형 설명
align-items: stretch 플렉스 항목을 확장해 교차축을 꽉 채웁니다. 기본 값입니다.
align-items: flex-start 교자축의 시작점을 기준으로 배치합니다.
align-items: flex-end 교차축의 끝점을 기준으로 배치합니다.
align-items: center 교차축의 중앙을 기준으로 배치합니다.
align-items: baseline 시작점과 글자 기준선이 가장 먼 플렉스 항목을 시작점에 배치합니다. 그리고 그 글자의 기준선과 다른 항목의 기준선을 맞추어 배치합니다.

 

slign-self 속성 - 교차축 기준의 배치 방법 지정하기

플렉스 항목을 개별적으로 배치할 수 있습니다.  플렉스 컨테이너에서 플렉스 항목 전체의 배치 방법을 결정하지만 align-self속성으로 특정 플렉스 항목만 배치 방법을 바꿀 수 있습니다. 따라서 이 속성은 항목 자체의 스타일로 지정합니다.

기본형 설명
align-self: auto 플렉스 항목의 부모 속성 값을 상속받습니다.
align-self: stretch 플렉스 항목을 확장해 교차축을 꽉 채웁니다. 
align-self: flex-start 교자축의 시작점을 기준으로 배치합니다.
align-self: flex-end 교차축의 끝점을 기준으로 배치합니다.
align-self: center 교차축의 중앙을 기준으로 배치합니다.
align-self: baseline 시작점과 글자 기준선이 가장 먼 플렉스 항목을 시작점에 배치합니다. 그리고 그 글자의 기준선과 다른 항목의 기준선을 맞추어 배치합니다.

 

align-content속성 - 여러 줄일 때의 배치 방법 지정하기

기본형 설명
align-content: flex-start 주축의 시작점을 기준으로 배치합니다.
align-content: flex-end 주축의 끝점을 기준으로 배치합니다.
align-content: center 주축의 중앙을 기준으로 배치합니다.
align-content: space-between 첫 번째 플렉스 항목과 마지막 플렉스 항목은 시작점과 끝점에 배치한 후 중앙 항목들은 같은 간격으로 배치합니다.
align-content: space-around 모든 플렉스 항목들을 같은 간격으로 배치합니다.

 

+ Recent posts