개발자 도구

Flexbox 생성기

속성을 설정하고, 그것이 실제로 하는 일을 쉬운 말로 읽어 보세요.

Flexbox 생성기 내 기기에서 실행
  • 브라우저에서 실행됩니다 — 입력한 텍스트는 어디로도 전송되지 않습니다
  • 가입 불필요, 사용량 제한 없음, 원하는 만큼 무료로 사용

작동 방식

Flexbox가 복잡한 것은 아니지만, 거의 모두가 걸려드는 점이 하나 있습니다. justify-content와 align-items는 가로와 세로를 뜻하지 않습니다. 방향을 따르는 축과 그 가로지르는 축을 뜻하며, 그 방향은 직접 정하는 것입니다.

함정을 직접 짚어 보면

flex-direction: row이면 justify-content는 가로로, align-items는 세로로 작동합니다. column으로 바꾸면 둘이 완전히 뒤바뀝니다. flexbox 때문에 허비하는 시간은 사실상 전부 이것입니다. 아래의 설명은 방향을 바꾸면 함께 바뀌므로, 외우는 대신 관계를 눈으로 볼 수 있습니다.

주축과 교차축

주축은 flex-direction으로 정해지는, 항목이 흐르는 축입니다. 교차축은 그것에 수직입니다. justify-content는 주축을 따라 공간을 나누고, align-items는 교차축에서 항목의 위치를 정합니다. 이 두 이름이 익숙해지면 나머지는 자연스럽게 따라옵니다.

gap, 그리고 margin을 대체한 이유

gap은 첫 번째와 마지막 항목의 바깥에는 여백을 더하지 않고 항목 사이에만 간격을 둡니다. margin이 정확히 이 부분을 잘못 처리해서 예전에는 :last-child 편법으로 고쳤습니다. 현재 모든 브라우저가 지원하므로 더 이상 피할 이유가 없습니다.

nowrap은 넘치는 것이 아니라 줄어든다는 뜻입니다

기본값은 nowrap이며, 항목은 새 줄로 넘어가지 않고 원래 크기보다 작아져서 맞춰집니다. 그래서 flex 행 안에서 텍스트가 예상치 못하게 찌그러지는 경우가 있습니다. wrap을 지정하면 항목이 대신 아래로 내려가고, 자식 요소에 min-width: 0을 주면 내용보다 작아지는 것을 막습니다.

가로세로 모두 가운데 정렬

justify-content: center와 align-items: center를 함께 쓰면 flex-direction과 관계없이 항목이 양방향 모두 가운데에 놓입니다. 통째로 외워 둘 가치가 있는 유일한 조합입니다.

자주 묻는 질문

Flexbox 생성기 — 자주 묻는 질문

align-items가 가로로 움직이는 이유는 무엇인가요?

flex-direction이 column이기 때문입니다. 두 속성은 화면이 아니라 방향을 기준으로 합니다.

주축과 교차축은 어떻게 다른가요?

주축은 flex-direction으로 정해지는, 항목이 흐르는 방향입니다. 교차축은 그것에 수직입니다.

가로세로 모두 가운데 정렬하려면 어떻게 하나요?

justify-content: center와 align-items: center를 함께 사용하세요.

텍스트가 찌그러지는 이유는 무엇인가요?

기본값인 nowrap은 항목을 맞추려고 줄입니다. flex-wrap: wrap을 지정하거나 자식 요소에 min-width: 0을 지정하세요.

flexbox에서 gap을 쓸 수 있나요?

예, 현재 모든 브라우저에서 가능합니다. 양 끝에 여백이 생기지 않아서 margin보다 낫습니다.