flex
display: flex
는 요소들을 일직선상에서 일렬 배치하기 위해 사용합니다.
- 일렬 배치되는 요소들을
item
이라고 하고 item
들을 감싸는 요소를 container
라고 하는데, flex
속성은 container
에 적용해야 합니다.
- 일렬로 배치되는 방향을
main-axis(주축)
이라고 하고, cross-axis(교차축)
라고 하는데, 기본은 가로 방향이 주축입니다.
flex-direction
- 주축과 교차축을 변경할 수 있고, 주축의 방향을 반전시킬 수 있습니다.
- 기본값은
row
인데, row-reverse, column, column-reverse
로 방향을 변경할 수 있습니다.
flex-wrap
flex
속성을 사용하면 원래 한 줄에 배치되어야 합니다. 이러한 속성으로 뷰포트
의 너비가 아이템의 영역 크기보다 작다면, 아이템
의 크기를 지정했음에도 줄어들게 됩니다.
- 위의 이미지는
flex-wrap
속성을 지정하지 않아 아이템
의 영역이 뷰포트
를 넘어가 아이템
의 너비가 줄어들었고, flex-wrap: wrap
속성을 지정한 아이템
들은 다음 줄로 넘어갔습니다.
flex-flow
flex-direction
과 flex-wrap
의 속성을 한번에 사용하는 단축 속성입니다.
order
container
내부의 item
의 순서를 정하는 속성입니다. container
에 flex
나 grid
속성이 정해져있어야 사용할 수 있습니다.
- 기본값은
0
이므로 다른 요소보다 앞쪽에 위치하려면 음수를, 뒤쪽에 위치하려면 1
이상의 값을 사용하면 됩니다.
flex-grow
container
의 너비가 item
들의 영역의 크기의 합보다 더 크면 item
과 container
사이의 빈 공간이 생깁니다. 그런 경우에 남는 공간을 어떻게 차지할 것인지 정하는 속성입니다.
- 기본값은
0
으로, 음수는 불가능합니다. 나머지 공간을 속성값의 비율만큼 아이템
이 추가적으로 차지합니다.
flex-shrink
flex-grow
와 반대로 item
들의 크기가 container
의 너비보다 더 클 때, item
의 크기가 줄어들게 되는데 크기를 얼마나 줄일지 정하는 속성입니다.
- 기본값은
1
로, 음수는 불가능합니다. 값이 작으면 크기를 덜 줄여서, item
의 크기는 다른 요소보다 큽니다.
flex-basis
item
이 기본적으로 차지하는 영역을 지정합니다. 기본값은 auto
입니다.
item
의 콘텐츠
에 따라 item
의 크기가 정해지기 때문에 width
값을 별도로 지정하지 않는다면 item
의 크기가 제각각일 수 있습니다.
flex-grow: 1
은 속성값을 주면 남는 공간을 동일할게 할당하지만, 기본 영역의 크기가 다르기 때문에 item
별로 크기가 다릅니다.
flex-basis: 0
은 기본적으로 차지하는 영역이 없기 때문에 flex-grow: 1
과 같이 사용하면, 모든 item
이 같은 공간을 차지하는걸 알 수 있습니다.
flex
flex-grow, flex-shrink, flex-basis
속성을 같이 사용하는 단축 속성입니다.
- 값이 하나만 있는 경우는
flex-grow
의 값이고, flex-shirnk: 1, flex-basis: 0
입니다. flex-basis
의 원래 기본값은 auto
인데, 값이 하나 일때 기본값은 0
이라는 것을 유의해야 합니다. 그래서, flex: 1
은 grow: 1
이고 flex-basis: 0
이여서 평등하게 공간을 차지하게 됩니다.
- 값이 2개인 경우는
flex-grow, flex-shrink
의 값입니다.
- 값이 3개인 경우는
flex-grow, flex-shrink, flex-basis
의 값입니다.
justify-content
container
의 방향과 위치를 정렬하는 속성입니다.
flex-start
는 주축이 시작되는 부분이 시작 부분이고, flex-end
는 주축이 끝나는 부분이 시작 부분입니다.
아래는 flex-direction: row-reverse
로 방향을 반대로 하고, flex-end
로 주축이 끝나는 부분을 반대로 했습니다.
center
는 중앙 정렬을 해줍니다.
space-between
은 아이템
간의 거리를 일정하게 유지합니다. space-around
도 아이템
간의 거리를 일정하게 유지하는데 다른점은 space-around
는 양 끝의 아이템
들의 끝 쪽 공간도 일정하게 유지합니다.
aligin-items
justify-content
와 달리 메인축
이 아닌 교차축
에 대해 정렬하는 속성입니다.
justify-content
는 container
내에서 item
들을 정렬하는 속성이고, align-items
는 container
자체를 정렬하는 속성입니다.
- 기본값은
stretch
로, height
값을 지정하지 않으면 container
의 높이를 전부 차지합니다.
flex-start, flex-end, center
로 값을 지정할 수 있습니다.
aligin-content
item
이 여러 줄로 나눠졌을 때, align-items
대신 여러 줄을 정렬하는 속성입니다.
center, space-between, space-around
를 이용하여 item
들을 정렬할 수 있습니다.
aligin-self
aligin-items
와 같은 속성이지만, item
들 중에서 특정한 하나의 item
에만 속성을 적용시키고 싶을 때 사용할 수 있습니다.