CSS Flexbox 생성기

CSS 생성
다음

Flexbox는 1차원 레이아웃의 표준입니다: 카드 줄, 내비게이션 바, 가운데 정렬 히어로, 폼 등. 컨테이너-아이템 모델은 강력하지만 열몇 개의 속성이 직관적이지 않은 방식으로 서로 영향을 주고받습니다. 이 생성기는 컨테이너 설정의 어려움을 덜어 줍니다. flex-direction, justify-content, align-items, flex-wrap, gap을 고르면 스타일시트에 바로 붙여 넣을 수 있는 깔끔한 CSS 규칙이 나옵니다.

CSS 만드는 방법

  1. 1

    방향 선택

    row, column 또는 반대 방향 변형을 고릅니다. 아이템이 흐르는 축인 flex-direction을 정합니다.

  2. 2

    justify-content 설정

    주축에서 아이템을 어떻게 배분할지 고릅니다: 시작, 가운데, space-between, space-around, 끝.

  3. 3

    align-items 설정

    교차축에서 아이템을 어떻게 정렬할지 고릅니다: stretch, 시작, 가운데, 끝.

  4. 4

    gap과 wrap 설정

    아이템 사이의 간격을 픽셀로 넣고, 아이템이 다음 줄로 넘어갈지 정합니다.

  5. 5

    CSS 복사

    생성기가 모든 속성을 담은 컨테이너 규칙을 출력하므로 스타일시트에 붙여 넣기만 하면 됩니다.

컨테이너 속성

속성 효과
flex-direction row / column / row-reverse / column-reverse 주축
flex-wrap nowrap / wrap / wrap-reverse 아이템 줄바꿈 여부
justify-content flex-start / center / flex-end / space-between / space-around / space-evenly 주축 분배
align-items flex-start / center / flex-end / baseline / stretch 각 줄의 교차축 정렬
align-content 같은 값 + space-between / space-around 줄바꿈 시 줄들의 교차축 분배
gap (row-gap, column-gap) 길이 아이템 간 간격

아이템 속성

속성 효과
flex-grow 0 이상(단위 없음) 남은 공간을 흡수할 비율
flex-shrink 0 이상(단위 없음) 오버플로우 시 줄어들 비율
flex-basis 길이 또는 auto grow/shrink 이전의 시작 크기
flex 단축형(1 1 auto 등) 위 세 가지를 한 번에
align-self auto / flex-start / center / flex-end / baseline / stretch 단일 아이템에 대해 align-items 재정의
order 정수 DOM 변경 없이 시각적 재배치

flex: 1 트릭

flex: 1flex: 1 1 0%의 단축형입니다. 아이템이:

  • 남은 공간을 채우도록 늘어나고(grow: 1)
  • 필요하면 줄어들며(shrink: 1)
  • 0 크기에서 시작합니다(basis: 0%)

동일한 너비의 컬럼이라면 모든 아이템에 flex: 1을 주면 완벽하게 균등 분할됩니다. 콘텐츠보다 작아지면 안 되는 사이드바라면 flex: 0 0 240px(grow/shrink 없음, basis 240px)를 사용하세요.

자주 쓰는 패턴

가운데 정렬 히어로

.hero {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

좌측 로고, 우측 링크의 내비게이션 바

.nav {
  display: flex;
  align-items: center;
  gap: 2rem;
}
.nav-links {
  margin-left: auto;  /* 오른쪽으로 밀기 */
  display: flex;
  gap: 1rem;
}

반응형 카드 줄

.card-row {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}
.card {
  flex: 1 1 260px;  /* grow/shrink, 줄바꿈 전 최소 260px */
}

입력이 가변이고 버튼이 고정인 폼 필드

.field {
  display: flex;
  gap: 0.5rem;
}
.field input {
  flex: 1;
}
.field button {
  flex: 0 0 auto;
}

Flexbox vs. Grid

  • Flexbox: 1차원(행 또는 열). 아이템 크기가 콘텐츠 기반이거나 단일 라인을 따라 공간을 분배할 때 가장 좋습니다.
  • Grid: 2차원(명시적인 행과 열 트랙). 행과 열 구조가 동시에 있는 레이아웃에 가장 좋습니다.

내비게이션 바나 카드 스택은 Flexbox, 여러 행이 정렬된 제품 카드 그리드는 CSS Grid. 실제 페이지의 대부분은 두 가지를 함께 씁니다, Grid 페이지 레이아웃 안에 Flexbox 컴포넌트.

자주 만나는 함정

  • 아이템이 컨테이너를 채우지 않음: 기본 align-items: stretch는 아이템에 고정 height가 없을 때만 적용됩니다. 명시적 height가 있으면 그 크기를 유지합니다.
  • gap이 안 먹힘: 브라우저 지원을 확인하세요. Flex gap은 늦게 들어왔고 Safari 14.1 미만에서는 미지원이었습니다. 2024년 이후로는 보편적입니다.
  • 컬럼 flex의 자식이 줄어듦: flex 컬럼의 기본값 align-items: stretch가 자식을 컨테이너 너비로 늘립니다. 자식이 width를 지정하면 이를 깨고 나옵니다.
  • order는 시각적일 뿐: 스크린 리더와 키보드 내비게이션은 DOM 순서를 따릅니다. 콘텐츠 의미를 바꾸기 위해 order를 쓰지 마세요. 시각적 다듬기에만 사용합니다.

자주 묻는 질문

2차원 페이지 레이아웃(행과 열을 함께)은 Grid, 1차원 분배(내비 바, 버튼 줄, 스택)는 Flexbox. Grid 셀 안의 내부 레이아웃은 Flexbox. 대부분 복잡한 UI는 둘 다 씁니다.

flex-shrink 기본값이 1이지만 min-width 기본값이 auto로 콘텐츠 너비와 같기 때문입니다. 아이템에 min-width: 0(또는 min-inline-size: 0)을 설정해 본질 크기 아래로도 줄어들 수 있게 하세요.

컨테이너에 display: flex; justify-content: center; align-items: center;. 대부분의 “가운데 정렬” 케이스를 두 줄로 해결합니다.

모든 모던 브라우저에서 동작합니다. Safari는 늦었고(14.1, 2021년 4월), 오늘날 모든 주요 브라우저가 지원합니다. 가능하면 margin 기반 간격을 gap으로 교체하세요, 훨씬 단순합니다.

관련 도구