</>DevTools

FLXCSS Flexbox 생성기

CSS Flexbox 레이아웃을 시각적으로 생성

1
2
3
4
5
10px
5
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
gap: 10px;

CSS Flexbox 완벽 가이드

CSS Flexbox(Flexible Box Layout)는 2009년 W3C 초안이 나온 이후 현재 모든 모던 브라우저에서 지원되는 1차원 레이아웃 시스템입니다. float와 inline-block으로 힘겹게 구현하던 수직 중앙 정렬, 균등 분할, 동적 크기 조정을 단 몇 줄의 CSS로 처리할 수 있게 해줍니다. 이 도구는 버튼을 클릭하는 즉시 레이아웃이 어떻게 변하는지 시각적으로 확인하면서 CSS 코드를 복사할 수 있게 해줍니다.

Flex Container 속성 총정리

display: flex — 플렉스 컨테이너 시작

부모 요소에 display: flex를 선언하면 해당 요소가 flex container가 되고 직계 자식은 flex item이 됩니다.

.container {
  display: flex;        /* 블록 레벨 flex */
  /* display: inline-flex; */ /* 인라인 flex */
}

flex-direction — 주 축 방향

.container {
  flex-direction: row;            /* 기본값: 왼쪽→오른쪽 */
  flex-direction: row-reverse;    /* 오른쪽→왼쪽 */
  flex-direction: column;         /* 위→아래 */
  flex-direction: column-reverse; /* 아래→위 */
}

justify-content / align-items — 정렬의 핵심

/* justify-content: 주 축(main axis) 정렬 */
.container {
  justify-content: flex-start;    /* 시작점 */
  justify-content: center;        /* 중앙 */
  justify-content: flex-end;      /* 끝점 */
  justify-content: space-between; /* 양 끝 배치, 사이 균등 */
  justify-content: space-around;  /* 각 아이템 양쪽 동일 마진 */
  justify-content: space-evenly;  /* 모든 간격 균등 */
}

/* align-items: 교차 축(cross axis) 정렬 */
.container {
  align-items: stretch;    /* 기본값: 높이 채우기 */
  align-items: center;     /* 세로 중앙 */
  align-items: flex-start; /* 상단 정렬 */
  align-items: flex-end;   /* 하단 정렬 */
  align-items: baseline;   /* 텍스트 기준선 맞춤 */
}

Flex Item 속성 — 개별 아이템 제어

flex-grow / flex-shrink / flex-basis

.item {
  flex-grow: 1;    /* 남은 공간 비율 차지 */
  flex-shrink: 1;  /* 공간 부족 시 줄어드는 비율 */
  flex-basis: 0%;  /* 기본 크기 */
}

/* 단축 표기 */
.item { flex: 1; }        /* 1 1 0% */
.item { flex: none; }     /* 0 0 auto - 고정 크기 */
.item { flex: auto; }     /* 1 1 auto */

/* 실전 예시: 사이드바 + 본문 */
.sidebar { flex: 0 0 240px; }  /* 240px 고정 */
.main    { flex: 1; }          /* 나머지 공간 전부 *

Flexbox vs Grid — 언제 무엇을 쓸까?

Flexbox가 적합한 경우

  • 내비게이션 바 아이템 정렬
  • 버튼 그룹, 태그 목록
  • 카드 내부 콘텐츠 배치
  • 수직 중앙 정렬 (align-items: center)
  • 동적으로 개수가 변하는 아이템 처리

CSS Grid가 적합한 경우

  • 페이지 전체 레이아웃 (header, sidebar, main, footer)
  • 카드 그리드 (정해진 컬럼 수)
  • 행과 열을 동시에 제어해야 하는 경우
  • 복잡한 2차원 배치

반응형 레이아웃 패턴

Holy Grail 레이아웃

.layout {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.header, .footer { flex: none; }

.body {
  display: flex;
  flex: 1;
}

.sidebar { flex: 0 0 200px; }
.main    { flex: 1; }

/* 모바일에서 세로 배치 */
@media (max-width: 768px) {
  .body { flex-direction: column; }
  .sidebar { flex: none; }
}

자주 묻는 질문 (FAQ)

gap과 margin의 차이는?

gap은 flex/grid 컨텍스트에서 아이템 사이 간격만 만들어 첫/마지막 아이템 외부에는 적용되지 않습니다. margin은 모든 방향에 적용되므로 가장자리에도 여백이 생깁니다. 내부 간격만 필요할 때 gap이 더 깔끔합니다.

flex: 1이 항상 동일한 크기를 보장하나요?

flex: 1은 flex-basis: 0%이므로 콘텐츠 크기를 무시하고 남은 공간을 균등 분배합니다. 반면 flex: auto는 flex-basis: auto로 콘텐츠 크기가 기준이 되어 크기가 달라질 수 있습니다.

Flexbox로 수직 중앙 정렬 하는 가장 간단한 방법은?

.center {
  display: flex;
  justify-content: center;
  align-items: center;
}

order 속성으로 순서를 바꿀 수 있나요?

네. order 속성으로 HTML 순서를 변경하지 않고 시각적 순서를 조정할 수 있습니다. 기본값은 0이며, 숫자가 작을수록 앞에 배치됩니다. 단, 스크린 리더는 HTML 순서를 따르므로 접근성에 주의하세요.

Tailwind CSS에서 Flexbox 사용하기

<div class="flex items-center justify-between gap-4">
  <span class="flex-none">로고</span>
  <nav class="flex gap-2">...</nav>
  <button class="flex-none">로그인</button>
</div>

🔗관련 도구🎨 CSS 도구