flex box는 CSS3에 추가된 레이아웃 방식으로, flexbox를 사용하면 요소의 크기와 순서를 유연하게 배치할 수 있다. float
나 display
속성을 이용하는 기존의 방식보다 훨씬 편리해 요즘은 flex
를 자주 쓰는 추세라고 한다! (그래도 float, display도 알아야한다. 개발자는 기존의 코드도 이해할 수 있어야하니까!)
flex container
: 상위 부모 요소 flex item
: 자식 요소즉, 한 문장으로 표현하자면❗️
flex container
가 flex의 영향을 받는 전체 공간이고, 설정된 속성에 따라 각각의 아이템들이 어떤 형태로 배치되는 것!
.flex_container {
display: flex;
}
위의 코드처럼 정렬하려는 요소의 부모 요소에 다음과 같이 display: flex;
속성을 선언하면 된다.
display: flex;
속성을 주게 되면 아이템들은 가로 방향으로 정렬되고, content의 width만큼만 자리를 차지하게 된다. (inline 요소들처럼!)
먼저
flex container
에 적용하는 속성들을 알아보자!
요소들이 배치되는 축의 방향을 설정하는 속성
기본값이며 아이템이 가로방향으로 흐른다. (좌 -> 우)
아이템이 역순 가로방향으로 흐른다. (우 -> 좌)
아이템이 세로방향으로 흐른다. (상 -> 하)
아이템이 역순 세로방향으로 흐른다. (하 -> 상)
컨테이너가 더 이상 아이템들을 한 줄에 담을 여유 공간이 없을 때 아이템을 어떻게 할지 결정하는 속성.
기본값, 줄바꿈을 하지 않는다.
줄바꿈을 한다.
줄바꿈을 하며 아이템을 역순으로 배치한다.
flex-direction
, flex-wrap
을 한번에 지정할 수 있다.
.flex-container {
flex-flow: column wrap-reverse;
}
메인축의 방향으로 아이템을 배치하는 속성
시작점으로 정렬
flex-direction: row
: 왼쪽을 기준으로
flex-direction: column
: 위를 기준으로
끝점으로 정렬
flex-direction: row
: 오른쪽을 기준으로
flex-direction: column
: 아래를 기준으로
가운데 정렬
아이템의 사이에 균일한 간격을 만든다.
아이템의 둘레에 동일한 간격을 만든다.
아이템들의 사이와 양 끝에 동일한 간격을 만든다.
수직축의 방향으로 아이템을 배치하는 속성
기본값, 아이템들이 끝까지 늘어난다.
시작점으로 정렬
flex-direction: row
: 위를 기준으로
flex-direction: column
: 왼쪽을 기준으로
끝점으로 정렬
flex-direction: row
: 아래를 기준으로
flex-direction: column
: 오른쪽을 기준으로
가운데 정렬
텍스트 베이스라인 기준으로 정렬
flex-wrap: wrap;
의 상태에서, 줄바꿈이 되었을 때의 수직축 방향을 어떻게 정렬할 것인지를 결정하는 속성
flex item
에 적용하는 속성들을 알아보자!
아이템의 기본 크기를 결정.
flex-direction: row
: 너비flex-direction: column
: 높이값에는 각종 단위의 수가 들어갈 수 있다. (%
, px
, rem
등).
auto가 기본 값이며 해당 아이템의 width값을 사용한다.
.flex-items {
flex-basis: 50px;
/* width: 50px; */
/* 두 속성 동시에 사용 가능 */
}
아이템이 flex-basis
의 값보다 커질 수 있는지를 결정.
0보다 큰 값을 세팅하면 해당 아이템이 유연한 박스로 변하고 빈 공간을 메꾼다.
아이템이 flex-basis
의 값보다 작아질 수 있는지를 결정.
0보다 큰 값을 세팅하면 해당 아이템이 유연한 박스로 변하고 flex-basis
의 값보다 작아진다.
align-items
의 아이템 버전!
아이템들의 나열 순서를 결정
.flex-items:nth-child(1) { order: 3; }
.flex-items:nth-child(2) { order: 1; }
.flex-items:nth-child(3) { order: 2; }