개발/CSS

Flexbox 사용법!

Dev... 2021. 12. 3. 03:09

예전에는 레이아웃을 만들기 위해 position, float, table을 이용했다.

 

이것들로는 박스 안의 아이템들을 수직으로 가운데 정렬하는 것, 아이템들의 사이즈에 상관없이 동일한 간격, 사이즈로 박스 안에 배치하는 것, 박스를 동일한 높이로 두는 것 등을 하는데 제약사항이 있었다.

 

Flexbox로 위의 것들을 손쉽게 할 수 있다.

 

중요한 것!

첫 번쨰

Flexbox는 container에 적용할 수 있는 속성 값, item들에 적용할 수 있는 속성 값이 존재한다.

 

Container

  • display
  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

Item

  • order
  • flex-grow
  • flex-shrink
  • flex
  • align-self

두 번째

Flexbox에는 중심축과 반대 축이 있다.

수평으로 정렬되어 있을 때, 수평축이 중심축, 수직축이 반대축이 된다.

 

Container


flex-direction

dislpay: flex;

container에 display: flex; 를 지정하면 아이템들이 가로로 정렬될 건데, flex-direction 속성이 row로 기본 지정되어있기 때문이다.

 

flex-direction: row-reverse;

flex-direction 속성을 row-reverse로 지정하면 수평축을 중심축으로 반대쪽부터 반대 순서로 정렬된다.

 

column 이면 수직축이 중심축이 된다.

 

column-reverse 이면 바닥부터 반대 순서로 정렬된다.

 

flex-wrap

기본값은 nowrap이다. 창을 줄여도 item들이 무조건 한 줄로 나열되게 된다.

 

flex-wrap: wrap;을 적용하게 되면 한 줄이 다 찼을 때 자동으로 다음 줄로 넘어가게 된다.

 

flex-flow 속성으로 flex-direction과 flex-wrap속성을 한 번에 설정할 수 있다. ex) flex-flow: column wrap;

 

justify-content

justify-content는 중심축에서 item들을 어떻게 배치할 것인지 결정한다.

 

기본값은 flex-start이다. 왼쪽부터 item들을 배치한다.

수직축이 중심축이라면 위부터 item들을 배치한다.

 

justify-content: flex-end;
justify-content: flex-end;

flex-end는 flex-direction속성의 reverse와 다르게 item들의 순서를 유지한 채, 오른쪽, 아래로 붙인다.

 

justify-content: center;

center는 item들이 중심축의 중간으로 정렬시킨다.

 

justify-content: space-round;

space-round는 각 item의 주위에 일정한 space를 준다.

 

justify-content: space-between;

space-between은 맨 끝의 item을 화면 끝에 붙이고 중간의 item들 사이에 일정한 space를 준다.

 

align-items

align-items는 반대 축에서 item 전체를 어떻게 배치할 것인지 결정한다.

 

align-items: center;

center는 item들을 반대축 기준 중간으로 정렬한다.

 

1번 item에 padding을 넣음.

이렇게 텍스트 위치가 균일하지 않을 때

 

align-items: baseline;

align-items에 baseline을 적용하면 텍스트 위치가 균일하게 배치된다.

 

align-content

align-content는 반대축에서 item들을 어떻게 배치할 것인지 결정한다. 한 줄일 경우 효과가 없다.

 

align-content: space-between;

space-between은 맨 끝의 item들을 위아래로 붙이고 중간에 일정한 space를 준다.

나머지 justify-content의 값들도 사용할 수 있다.

 

Item


flex-grow

flex-grow는 container가 커졌을 때 공간을 item들이 어떤 비율로 채울 것인지 정한다. 기본값은 0이다.

flex-grow값이 지정된 item들끼리 container의 공간을 할당받는다.

 

1번 item에만 flex-grow: 1;

1번만 container를 모두 채운 걸 볼 수 있다.

 

모두 flex-grow: 1;

모든 item에 flex-grow를 동일하게 주면 같은 비율을 가지게 된다.

 

flex-grow 각각 2, 1, 1

2, 1, 1로 주면 container가 커질 때 2 : 1 : 1의 비율로 item의 크기가 늘어난다.

 

flex-shrink

flex-shrink는 container가 작아졌을 때 item들이 어떤 비율로 작아질 것인지 정한다. 기본값은 0이다.

 

2, 1, 1

container가 기본값으로 채워졌을 때보다 작아질 때 첫 번째 아이템만 2배 더 작아지게 된다.

 

flex-basis

flex-basis는 item의 초기값을 지정한다. width를 나타내는 단위, %로 지정할 수도 있다. 기본값은 auto.

 

align-self

align-self는 item별로 정렬을 할 수 있게 해 준다. align-items의 값들을 사용한다.