Tech/CSS

[CSS] CSS3의 핵심적 변화 - Flex(Flexible Box)

lonnie(동현) 2021. 1. 24. 12:31

1. CSS3 Flexible Box의 등장



 대부분의 웹 사이트는 전체 레이아웃이 수직 구성으로 ‘위-아래’로 스크롤하여 사용하게 된다. 레이아웃을 구성할 때 가장 많이 사용되는 요소들은 보통 블록(block) 개념으로 표시되고, 이는 수직으로 쌓이기 때문에 상대적으로 쉽게 구성할 수 있다. 하지만 수평 구조를 만들 때는 어떨까? 수평 구조를 만드는 속성이 명확하지 않았기 때문에 보통은 float 혹은 inline-block 등을 통해서 구성하곤 했다.

 

 이 문제를 해결할 수 있는 명확한 속성의 등장이 바로 Flex(Flexible Box)이다. 우리는 이 Flex를 통해서 수평 구조를 자유롭게 구성할 수 있게된다.


2. CSS3 Flexible Box의 사용


 Flex는 2개의 개념으로 나뉘게 된다. 첫 번째는 Container, 두 번째는 Items이다. 이 두 가지에 적용하는 속성이 구분되어 있다는 것을 잘 알고 있어야 한다. 

Flex Contatiner

문서의 영역 중에서 flexbox가 놓여 있는 영역을 Flex Container라고 부른다. 이에 적용하는 속성은 다음과 같다.

주축(main-axis)과 교차 축(cross-axis)

: row는 items를 수평 축으로 표시하고, 이때 주 축은 수평이고 교차 축은 수직이다.

반대로 column은 items를 수직 축으로 표시하고, 주 축은 수직이고 교차 축은 수평이 된다.

display

: flex container를 정의한다.

의미 기본 값
flex Block 특성의 Flex Container를 정의 (수직 쌓임)  
inline-flex Inline 특성의 Flex Container를 정의 (수평 쌓임)  

 수직 , 수평은 container 끼리의 관계이고 Items에는 영향을 주지 않는다.

flex-flow

: flex-direction과 flex-wrap의 축약 속성으로, 첫 번째 값이 direction 두 번째 값이 wrap이다.

의미 기본 값
flex-direction Items의 주 축을 설정하여, 나열되는 방향을 변경 row
flex-wrap Items의 줄 바꿈을 설정 nowrap

flex-direction

: items의 주 축을 설정하고 나열되는 방향을 변경한다.

의미 기본 값
row items를 수평 축(왼쪽에서 오른쪽)으로 표시 row
row-reverse items를 row의 반대 방향으로 표시  
column items를 수직 축(위에서 아래)로 표시  
column-reverse items를 column의 반대 방향으로 표시  

flex-wrap

: items의 줄 바꿈을 설정한다.

의미 기본 값
nowrap 모든 items를 한 줄에 표시 nowrap
wrap items를 여러 행에 나열  
wrap-reverse items를 wrap의 역 방향으로 여러 행에 나열  

justify-content

: 주 축의 정렬 방법을 설정한다.

의미 기본 값
flex-start items를 시작 점으로 정렬 flex-start
flex-end items를 끝 점으로 정렬  
center items를 가운데 정렬  
space-between 시작 item은 시작점에, 마지막 item은 끝 점에 정렬 나머지 items는 사이에 같은 간격으로 정렬  
space-around items를 균등한 여백을 포함하여 정렬  

시작점(flex-start)과 끝점(flex-end)

: 주 축이나 교차 축이 시작하는 지점과 끝나는 지점을 의미한다.

align-content

: 교차 축의 정렬 방법을 설정한다. flex-wrap 속성을 통해 items가 2줄 이상일 경우이고 여백이 있는 경우에만 사용 가능하다.

의미 기본 값
stretch container의 교차 축을 채우기 위해 items를 늘림 stretch
flex-start items를 시작 점으로 정렬  
flex-end items를 끝 점으로 정렬  
center items를 가운데 정렬  
space-between 시작 item은 시작점에, 마지막 item은 끝 점에 정렬 나머지 items는 사이에 같은 간격으로 정렬  
space-around items를 균등한 여백을 포함하여 정렬  

align-items

: 교차 축의 정렬 방법을 설정한다. items가 한 줄 경우 많이 사용한다.

의미 기본 값
stretch container의 교차 축을 채우기 위해 items를 늘림 stretch
flex-start items를 각 줄의 시작 점으로 정렬  
flex-end items를 각 줄의 끝 점으로 정렬  
center items를 가운데 정렬  
baseline items를 문자 기준선에 정렬  

Flex Items

 문서의 영역 중에서 Flex Container안에 들어있는 요소들을 Flex items라고 한다. 이에 적용하는 속성은 다음과 같다.

order

: items의 순서를 정한다. items에 숫자를 지정하고 숫자가 클수록 순서가 밀린다. 음수도 허용된다.

의미 기본 값
order items의 순서를 설정 0

flex

: items의 너비(증가, 감소, 기본)를 설정하는 축약 속성으로 증가 너비(grow), 감소 너비(shrink), 기본 너비(basis) 순으로 사용된다.

의미 기본 값
flex-grow items의 증가 너비 비율을 설정 0
flex-shrink items의 감소 너비 비율을 설정 1
flex-basis items의 기본 너비 설정 auto

 flex-grow를 제외한 개별 속성은 생략할 수 있다. 생략된 속성들은 default(기본 값)을 갖게 된다.

여기서 주의할 점이 두 가지 있다.

  •  첫 번째, flex-basis의 기본 값은 auto이지만, 축약 속성으로 사용 시 생략할 경우 0으로 적용된다.  예를 들어, flex : 1; 혹은 flex : 1 1;의 값은 flex : 1 1 auto;가 아니라 flex :  1 1 0;이 되는 것이다.
  •  두 번째, flex : 1 10px;  즉 두 번째 속성 값에 단위를 사용하면 감소 너비가 적용되는 것이 아니라 기본 너비로 적용된다. 따라서 사용 시에 유의해야 한다.

flex-grow

: items의 증가 너비 비율을 설정한다.

의미 기본 값
flex-grow items의 증가 너비 비율을 설정 0

flex-shrink

: items의 감소 너비 비율을 설정한다. 숫자가 클수록 더 많은 너비가 감소한다.

의미 기본 값
flex-shrink items의 감소 너비 비율을 설정 1

flex-basis

: items의 기본 너비를 설정한다. 값이 auto일 경우 width, height 등의 속성으로 item의 너비를 설정할 수 있다. 하지만 단위 값이 주어질 경우 설정할 수 없다.

의미 기본 값
auto 가변 item과 같은 너비 auto
단위 px, em, cm 등의 단위로 지정  

align-self

: 교차 축에서 개별 item의 정렬 방법을 설정한다. 필요에 의해 일부 item만 정렬 방법을 변경할 경우 사용한다. 이 속성은 align-items 속성보다 우선한다.

의미 기본 값
auto container의 align-items 속성을 상속 받음 auto
stretch container의 교차 축을 채우기 위해 items를 늘림  
flex-start items를 각 줄의 시작 점으로 정렬  
flex-end items를 각 줄의 끝 점으로 정렬  
center items를 가운데 정렬  
baseline items를 문자 기준선에 정렬  
728x90
반응형

'Tech > CSS' 카테고리의 다른 글

[CSS] CSS pre-processor(전처리기) - Sass(SCSS)  (0) 2021.02.25
[CSS] CSS3의 핵심적 변화 - Grid layout  (0) 2021.01.27
[CSS] CSS 선택자(selector)  (4) 2020.12.22