MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

CSS Flexbox 생성기

flex 속성을 바꾸면서 번호 상자가 새 자리로 움직이는 모습을 보고, 아이템별 속성까지 조절한 뒤 CSS를 그대로 복사합니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제
px
px

선택한 아이템: 아이템 1

미리보기에서 아이템을 클릭하면 개별 flex 속성을 고칠 수 있습니다.

px

아이템이 움직이는 모습

값을 바꾸면 아이템이 새 자리로 미끄러지듯 이동합니다. 아이템을 클릭해 선택하세요.

CSS

⌘/Ctrl + Enter로 복사
컨테이너
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
gap: 16px;

이 CSS Flexbox 생성기는 flex 레이아웃의 대부분을 결정하는 컨테이너 속성, 즉 방향, 줄바꿈, justify-content, align-items, align-content, gap을 바꿔 가며 번호가 붙은 상자 최대 12개가 어떻게 반응하는지 바로 보여 줍니다. 상자는 튀지 않고 새 위치로 미끄러져 가기 때문에 어떤 속성이 무엇을 움직였는지 정확히 볼 수 있습니다. 결과는 스타일시트에 그대로 붙여 넣을 수 있는 display: flex 블록입니다.

flexbox를 연습해 보는 사람은 대개 justify-content와 align-items 중 무엇이 원하는 방향으로 움직이는지 알고 싶어 합니다. row에서 column으로 바꿀 때 상자가 튀어 오르는 모습을 보면, 두 속성이 축을 맞바꾼다는 가장 헷갈리는 개념을 가장 빨리 이해할 수 있습니다.

상자를 클릭해 선택하면 그 아이템 하나에 flex-grow, flex-shrink, flex-basis, align-self, order를 따로 줄 수 있습니다. 기본값과 다른 아이템은 아이템 탭에 .item-N 규칙으로 나옵니다. 상자 크기는 일부러 제각각이어서 stretch, baseline, 줄바꿈이 눈에 보입니다. 선택한 값은 브라우저 안에서 처리되고 어디로도 전송되지 않습니다.

사용 방법

  1. 방향 선택

    가로 주축이면 row, 세로 주축이면 column을 고릅니다. reverse 값은 DOM 순서는 그대로 두고 시작하는 쪽만 뒤집습니다. 나머지 속성은 모두 이 축을 기준으로 해석됩니다.

  2. 줄바꿈 여부

    wrap은 공간이 모자라면 항목을 다음 줄로 내리고, wrap-reverse는 새 줄을 위쪽으로 쌓으며, nowrap은 한 줄에 두고 항목을 줄입니다. 아이템 수를 10개 이상으로 늘리면 좁은 미리보기에서 차이를 바로 볼 수 있습니다.

  3. justify-content 설정

    주축을 따라 항목을 배분합니다. flex-start, center, flex-end, space-between, space-around, space-evenly 중에서 고릅니다.

  4. align-items 설정

    교차축 방향 정렬입니다. stretch, flex-start, center, flex-end, baseline 중에서 고릅니다.

  5. 간격 입력

    0에서 96픽셀 사이의 정수 간격을 입력합니다. 연결 스위치가 켜져 있으면 gap: 16px처럼 한 값으로, 꺼져 있으면 행·열 간격이 gap: 8px 24px처럼 따로 출력됩니다.

  6. 아이템 하나 조절하고 복사

    상자를 클릭해 늘어남·줄어듦·기준 크기·개별 정렬·순서를 바꿉니다. 컨테이너 탭은 컨테이너 규칙에, 아이템 탭은 자식 요소의 규칙에 복사해 넣으세요.

작동 원리

주축과 교차축

W3C의 CSS Flexible Box Layout Module Level 1은 두 개의 축을 정의합니다. 주축은 flex-direction을 따라 row면 가로, column이면 세로입니다. 교차축은 그에 수직입니다. justify-content는 항상 주축, align-items는 항상 교차축에서 작동하므로 방향을 바꿔도 사용할 속성은 같고 실제로 움직이는 방향만 달라집니다.

그래서 상자를 가로세로 모두 가운데 두려면 justify-content: center와 align-items: center 두 속성이 필요합니다. row에서는 각각 가로와 세로, column에서는 반대로 작동하지만 짝을 이루면 어느 쪽이든 정중앙입니다.

justify-content남는 공간이 가는 곳
flex-start마지막 항목 뒤에 전부, 항목은 시작쪽에 몰림
center첫 항목 앞과 마지막 항목 뒤에 절반씩
flex-end첫 항목 앞에 전부, 항목은 끝쪽에 몰림
space-between항목 사이에만, 처음과 끝은 가장자리에 붙음
space-around양 끝에는 절반 크기, 항목 사이에는 전체 크기
space-evenly양 끝과 항목 사이가 모두 같은 크기

align-items가 안 먹는 것처럼 보이는 이유

align-items는 각 항목을 자신이 속한 flex 줄 안에서 배치합니다. 컨테이너가 가장 큰 항목만큼만 높다면 교차축에 남는 공간이 없어서 center, flex-start, flex-end가 똑같아 보입니다. 컨테이너에 height나 min-height를 주면 차이가 보입니다. 초기값인 stretch는 교차축 크기가 지정되지 않은 항목만 늘립니다. baseline은 각 항목의 첫 줄 글자 기준선을 맞추므로 항목마다 글꼴 크기가 다를 때 쓸모가 있습니다.

줄바꿈과 align-content

flex-wrap: wrap이면 항목이 여러 flex 줄로 나뉩니다. 이때 align-items는 각 줄 안에서 작동하고, 줄 자체의 배치는 align-content가 맡습니다. 기본값 normal은 stretch처럼 동작합니다. 그래서 높이가 있는 줄바꿈 컨테이너에서는 align-items: center를 줘도 줄들이 세로로 퍼져 보일 수 있습니다. 줄바꿈을 켜면 줄 정렬 항목이 나타나고, 기본값이 아닌 값을 고를 때만 align-content 줄이 출력됩니다.

실제 예시

기본 툴바 행
입력
row, wrap, space-between, center, gap 16
출력
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
gap: 16px;

로고는 왼쪽, 버튼은 오른쪽에 붙이는 전형적인 space-between 용도입니다.

세로 스택, 자식 폭 꽉 채우기
입력
column, nowrap, center, stretch, gap 8
출력
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: center;
align-items: stretch;
gap: 8px;

column에서 justify-content: center는 컨테이너가 내용보다 높을 때만 효과가 있습니다.

정중앙 배치
입력
row, nowrap, center, center, gap 0
출력
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
align-items: center;
gap: 0px;

화면 한가운데에 두려면 컨테이너에 min-height: 100vh를 더합니다.

한 줄을 꽉 채우는 줄바꿈 카드
입력
row, wrap, 줄 정렬 center, 행 간격 8, 열 간격 24
출력
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
align-items: stretch;
align-content: center;
gap: 8px 24px;

줄바꿈이 켜져 있어서 align-content가 출력됩니다. 카드마다 flex: 1 1 150px를 주면 모든 줄이 가득 찹니다.

본문이 늘어나는 사이드바
입력
아이템 1: 줄어듦 0, 기준 크기 140 / 아이템 2: 늘어남 1
출력
.item-1 {
  flex: 0 0 140px;
}

.item-2 {
  flex: 1 1 auto;
}

아이템 1은 폭 140px을 지키며 줄어들지 않고, 아이템 2는 남는 공간을 모두 차지합니다.

거부되는 입력
입력
gap 4.5
출력
0~96 사이의 정수를 입력해 주세요.

메시지는 간격 입력란 아래에 표시되고, 값을 고치기 전까지 이전 결과가 흐리게 남아 있습니다.

자주 하는 실수

  • column 모드에서 두 축을 혼동

    column으로 바꾸면 justify-content: center는 세로 가운데, align-items: center는 가로 가운데가 됩니다. 엉뚱한 속성을 계속 바꾸다가 flexbox가 고장 났다고 결론짓기 쉽습니다.

  • min-width: auto 때문에 항목이 넘침

    flex 항목은 기본적으로 콘텐츠의 최소 크기보다 작아지지 않습니다. 긴 단어나 이미지가 있으면 행이 컨테이너보다 넓어질 수 있습니다. 항목에 min-width: 0이나 overflow: hidden을 주면 줄어듭니다.

  • space-around가 고르게 보일 것이라는 기대

    space-around는 각 항목 양쪽에 같은 몫을 주기 때문에 항목 사이 간격이 가장자리 간격의 두 배입니다. 모든 간격을 같게 하려면 space-evenly를 쓰세요.

  • 높이가 없으면 세로 정렬도 없음

    align-items: center를 줬는데 아무것도 안 움직이면 속성이 동작하지 않는 것이 아니라 교차축에 남는 공간이 없는 것입니다. 컨테이너에 min-height를 지정하세요.

  • gap과 margin을 겹쳐 사용

    gap은 항목 사이에만 공간을 더합니다. 자식에 margin도 있으면 합쳐지므로 gap 16px에 margin 8px씩이면 이웃 사이가 32px이 됩니다.

자주 묻는 질문

justify-content와 align-items는 무엇이 다른가요?

justify-content는 주축 방향 배분으로 row에서는 가로, column에서는 세로입니다. align-items는 그에 수직인 교차축 정렬입니다. 방향을 바꾸면 두 속성이 담당하는 실제 방향도 서로 바뀝니다.

flexbox로 div를 가로세로 가운데 정렬하려면?

부모에 display: flex; justify-content: center; align-items: center;를 쓰고 min-height: 100vh처럼 높이를 줍니다. 생성기의 정중앙 배치 예시가 바로 이 블록입니다.

space-between, space-around, space-evenly의 차이는?

space-between은 남는 공간을 항목 사이에만 줍니다. space-around는 항목마다 양쪽에 같은 공간을 주므로 가장자리 간격이 안쪽 간격의 절반입니다. space-evenly는 가장자리를 포함한 모든 간격이 같습니다.

flex의 gap은 모든 브라우저에서 되나요?

flex 컨테이너의 gap은 현재 Chrome, Edge, Firefox, Safari(14.1부터)에서 지원됩니다. 아주 오래된 브라우저에서만 margin으로 간격을 주는 대체 방법이 필요합니다.

flex 항목이 줄어들지 않는 이유는?

flex 항목의 기본값이 min-width: auto라서 콘텐츠보다 작아질 수 없습니다. 항목에 min-width: 0(column이면 min-height: 0)을 주고 글자가 줄바꿈되도록 하세요.

row-reverse, column-reverse, align-content도 만들 수 있나요?

만들 수 있습니다. 방향은 네 가지 값을 모두 고를 수 있고, 줄바꿈에 wrap-reverse가 있으며, 줄바꿈을 켜면 줄 정렬(align-content) 항목이 나타납니다. reverse 방향은 시각적 순서만 바꾸므로 키보드 포커스는 계속 DOM 순서를 따른다는 점에 유의하세요.

페이지 레이아웃에는 flexbox와 grid 중 무엇이 좋은가요?

내비게이션 바나 버튼 줄처럼 한 방향으로 흐르는 내용에는 flexbox가 맞습니다. 갤러리나 대시보드처럼 행과 열이 함께 정렬되어야 하면 grid를 쓰세요.

더 깊이 읽기

마지막 업데이트: