Flexbox (Flexible Box Module) 'Container'
display: flex;
flexbox
는 container
와 item
으로 이루어져 있다.
container
는 flex
속성을 가진 부모 소요이고, item
은 container
내부의 자식 요소이다.
flex
를 사용하면 요소들이 공간에 맞추어 크기나 위치를 조정한다.
위의 이미지에서 box
들은 모두 item
요소에 해당하며, box
외 배경색이 들어간 부분이
container
에 해당한다. flex
는 부모 요소와 자식 요소에 적용하는 속성이 구분되어 있다.
flex-direction
, justify-content
, align-items
, align-content
, wrap
, flex flow
align-self
, flex-grow
, flex-shrink
, flex-basis
, order
, flex
flex-direction
flex-direction: row / column;
flexbox
에서 레이아웃의 방향을 결정하는 속성이다.
row
가 기본값이며 메인축 즉, 가로축 방향을 설정하고 왼쪽에서 오른쪽으로 item
이 정렬된다.
column
은 교차축 즉, 세로축 방향을 설정하는 값이고 위에서 아래로 item
이 정렬된다.
이 때, row
와 column
모두 reverse
를 적용할 수 있는데 reverse
를 적용하게 되면
row
는 오른쪽에서 왼쪽으로, column
은 아래에서 위로 요소들이 정렬된다.
justify-content
justify-content: ...;
justify content
는 flex container
안의 item
들의 메인축(가로축) 배열에 대한 속성이다.
flex-start
flex-start
는 기본값으로 container
의 좌측으로 정렬된다.
flex-end
flex-end
는 container
의 우측으로 정렬된다.
center
center
는 container
의 중앙에 정렬된다.
space-between
첫번째 item
과 마지막 item
이 화면의 양 끝에 위치하고 남은 여백을 동일하게 적용한다.
space-around
item
을 기준으로 좌우의 여백을 동일하게 주어 정렬한다.
space-evenly
item
을 제외하고 남은 여백을 모두 동일하게 나누어 적용한다.
align-items
align-items
는 flex container
안의 item
들의 교차축(세로축) 배열에 대한 속성이다.
stretch
기본값으로 적용되며 자식 요소인 item
의 높이를 늘려 부모 요소인 container
의 전체 높이를 채운다.
flex-start
flex-start
는 container
의 상단에 정렬된다.
flex-end
flex-start
는 container
의 하단에 정렬된다.
center
center
는 container
의 중앙에 정렬된다.
baseline
item
들이 수직축 방향에서, item
자체의 크기와 별개로, 내부의 text baseline
에 맞추어 정렬된다.
align-content
align-content
와 align-items
는 수직선 상에서 item
들을 정렬한다는 부분은 동일하다.
하지만 align-items
는 모든 item
을 한 줄로 배치하고 정렬하고 align-content
는 여러 줄의 item
을 배치하고 정렬하는 데 사용된다는 점에서 다르다.
justify-content
와 동일한 속성값을 가지고 있고 align-content
는 wrap
이나 wrap-reverse
속성이 설정되어 있을 때만 사용할 수 있다.
wrap
wrap
은 부모 요소 안에 item
들을 강제로 한 열에 배치할 것인지,
요소의 css
속성을 유지하면서 여러 줄로 배치할 것인지 정한다.
위와 같이 container
안에 6개의 정해진 규격의 item
이 있을 때, 브라우저의 너비가 줄어들거나 부모 요소의 너비가 줄어들게 되어 item
의 자리가 부족해 졌을 경우, item
이 어떻게 배치될 지에 대한 것이다.
nowrap
nowrap
을 적용하면 부모 요소가 줄어들어 자리가 부족해졌음에도, 한 줄로 배치되기 위하여 자식 요소들의 너비가 줄어든 것을 볼 수 있다.
wrap
wrap
의 경우에는 자식 요소가 각 주어진 속성값을 유지하면서 container
안에 배치 될 수 있도록
두 줄로 나뉘어 배치된 것을 볼 수 있다.
wrap-reverse
wrap
과 같이 적용되나 순서가 반대로 된다.
flex-flow
flex-flow
는 flex-direction
과 flex-wrap
가 합쳐진 속성이다. 다음과 같이 사용한다.
flex-flow: column wrap;
Flexbox (Flexible Box Module) 'Item'
아래는 flexbox
중에 자식요소인 item
에 적용하는 속성에 대한 것이다.
flex
를 이용할 때 모든 자식 요소에 매번 class
나
id
를 부여하기는 번거로울 수 있으니 nth-child
등의 구조 선택자를 활용할 수 있다.
flex-basis
item
의 기본 크기를 지정하는 속성이다. 기본값은 auto
로 설정되어 있으며, 요소가 가지고 있을 기본 너비를 설정하는 값이다.
flex-basis: 0;
0
으로 지정된 경우 자식요소는 부모요소를 기준으로 크기가 결정된다.
flex-basis: auto;
auto
로 지정된 경우 자식요소는 콘텐츠 양, 크기를 기준으로 크기가 결정된다.
flex-grow
item
의 여백에 대한 증가 너비 비율을 지정하는 속성이다. 기본값은 0
으로 설정되어 있으며 0
이 지정되면 부모 요소의 크기나 여백에 관계 없이 기본 크기를 유지한다. 그러나 flex-grow
값이 주어지면 부모 요소의 크기가 커지거나 다른 여백이 생기게 되었을 때, 설정된 값만큼 비율로서 item
이 크기로 배정받는다.
예를 들어 item1
: 2, item2
: 1, item3
: 1, item4
:1로 분배했을 경우, 분배값의 총 합이 5 이므로 남은 여백의 20%에 자신의 분배값을 곱하여 배정하게 된다.
flex-shrink
item
의 감소 너비 비율을 지정하는 속성이다. flex-grow
의 반대 속성으로 볼 수 있다. 이 때 주의할 점은 숫자가 클 수록 더 많이 줄어든다는 점이다.
flex
자식 요소에 적용하는 flex
속성은 자식 요소인 item
의 크기와 관련된 속성으로 위의 세가지 속성, flex-grow
, flex-shrink
, flex-basis
가 합쳐진 속성이다. 다음과 같이 사용한다.
nth-child(1){flex: 0 1 auto;}
order
.box4{order: -1;}
item
들의 배치 순서를 지정하는 속성으로 값이 작을 수록 먼저 배치 되며 음수로도 적용 가능하다.
align-self
교차축에서 지정하는 item
만을 개별로 배치하는 속성이다. align-items
와 동일한 속성값을 가지고 있고, align-items
는 자식 요소 모두를 선택하고, align-self
는 지정한 한개의 자식요소를 선택한다는 점이 다르다.