10분 만에 마스터하는 CSS Flexbox! 복잡한 레이아웃도 쉽게 해결하는 비밀

2025. 5. 9. 23:10·TypeScript/CSS
반응형

Flexbox란?

Flexbox(Flexible Box Layout Module)는 CSS3에서 소개된 현대적인 레이아웃 모델입니다. 기존의 float나 positioning과 같은 레이아웃 방식의 한계를 극복하고, 더 효율적이고 예측 가능한 방식으로 요소를 배치할 수 있게 설계되었습니다.

Flexbox는 크게 두 가지 개념으로 나뉩니다:

  • Flex Container: Flexbox 레이아웃을 적용할 부모 요소
  • Flex Items: Flex Container 내부의 자식 요소들
.container {
  display: flex; /* 또는 display: inline-flex; */
}

위 코드처럼 display: flex를 설정하면 해당 요소는 Flex Container가 되며, 자식 요소들은 자동으로 Flex Items가 됩니다.

Flexbox 기본 개념

Flexbox를 이해하기 위한 핵심 용어들:

  • 주축(Main Axis): Flex Items가 배치되는 기본 축
  • 교차축(Cross Axis): 주축에 수직인 축
  • 시작점(Main Start/Cross Start): Flex Items가 배치되기 시작하는 지점
  • 끝점(Main End/Cross End): Flex Items 배치가 끝나는 지점
  • 크기(Main Size/Cross Size): Flex Item의 주축/교차축 방향으로의 크기

Container 속성

1. flex-direction

주축의 방향을 결정합니다.

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • row: 가로 방향 (기본값)
  • row-reverse: 가로 방향 역순
  • column: 세로 방향
  • column-reverse: 세로 방향 역순

2. flex-wrap

Flex Items가 한 줄에 들어가지 않을 때 줄바꿈 여부를 결정합니다.

.container {
  flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap: 줄바꿈 없음 (기본값)
  • wrap: 여러 줄로 나눔
  • wrap-reverse: 여러 줄로 나누고 역순으로 배치

3. flex-flow

flex-direction과 flex-wrap의 단축 속성입니다.

.container {
  flex-flow: row wrap; /* flex-direction과 flex-wrap 합쳐서 사용 */
}

4. justify-content

주축을 기준으로 Flex Items를 정렬합니다.

.container {
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
  • flex-start: 시작점 정렬 (기본값)
  • flex-end: 끝점 정렬
  • center: 가운데 정렬
  • space-between: 첫 항목은 시작점, 마지막 항목은 끝점에 정렬되고 나머지 항목은 균등 분포
  • space-around: 모든 항목이 균등한 여백을 갖도록 분포
  • space-evenly: 모든 여백이 동일하게 분포

5. align-items

교차축을 기준으로 Flex Items를 정렬합니다.

.container {
  align-items: stretch | flex-start | flex-end | center | baseline;
}
  • stretch: 컨테이너를 채우기 위해 늘림 (기본값)
  • flex-start: 교차축의 시작점 정렬
  • flex-end: 교차축의 끝점 정렬
  • center: 교차축의 가운데 정렬
  • baseline: 텍스트 기준선 정렬

6. align-content

여러 줄의 Flex Items가 있을 때 교차축 상에서의 정렬을 결정합니다.

.container {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
  • stretch: 컨테이너를 채우기 위해 늘림 (기본값)
  • flex-start: 교차축의 시작점 정렬
  • flex-end: 교차축의 끝점 정렬
  • center: 교차축의 가운데 정렬
  • space-between: 첫 줄은 시작점, 마지막 줄은 끝점에 정렬되고 나머지 줄은 균등 분포
  • space-around: 모든 줄이 균등한 여백을 갖도록 분포

Item 속성

1. order

Flex Item의 순서를 변경할 수 있습니다. 기본값은 0이며, 숫자가 작을수록 앞에 배치됩니다.

.item {
  order: 1; /* 기본값은 0 */
}

2. flex-grow

Flex Item이 필요에 따라 늘어나는 비율을 지정합니다. 기본값은 0입니다.

.item {
  flex-grow: 1; /* 기본값은 0 */
}

값이 0이면 늘어나지 않고, 양수값은 해당 비율만큼 남은 공간을 차지합니다.

3. flex-shrink

Flex Item이 필요에 따라 줄어드는 비율을 지정합니다. 기본값은 1입니다.

.item {
  flex-shrink: 1; /* 기본값은 1 */
}

값이 0이면 줄어들지 않고, 양수값은 해당 비율만큼 줄어듭니다.

4. flex-basis

Flex Item의 기본 크기를 지정합니다. 기본값은 auto입니다.

.item {
  flex-basis: auto | <length>;
}
  • auto: 내용물의 크기에 따라 결정
  • <length>: px, em, % 등의 단위로 지정

5. flex

flex-grow, flex-shrink, flex-basis의 단축 속성입니다.

.item {
  flex: 0 1 auto; /* flex-grow flex-shrink flex-basis */
}

자주 사용되는 값:

  • flex: 1: flex: 1 1 0%와 동일
  • flex: auto: flex: 1 1 auto와 동일
  • flex: none: flex: 0 0 auto와 동일
  • flex: 0 auto: flex: 0 1 auto와 동일

6. align-self

개별 Flex Item의 교차축 정렬을 오버라이드합니다.

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

Flexbox 활용 사례

1. 가운데 정렬

요소를 수평 및 수직 가운데 정렬하는 가장 쉬운 방법입니다.

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

2. 내비게이션 바

반응형 내비게이션 바를 쉽게 만들 수 있습니다.

nav {
  display: flex;
  justify-content: space-between;
}

.nav-links {
  display: flex;
  gap: 20px;
}

/* 모바일 화면에서는 방향 전환 */
@media (max-width: 768px) {
  nav {
    flex-direction: column;
  }
}

3. 카드 레이아웃

동일한 높이의 카드 그리드를 만들 수 있습니다.

.card-container {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

.card {
  flex: 1 1 300px;
  display: flex;
  flex-direction: column;
}

.card-content {
  flex-grow: 1; /* 내용이 적어도 카드 높이 유지 */
}

Flexbox vs Grid

Flexbox와 CSS Grid는 모두 현대적인 레이아웃 시스템이지만 각각 다른 용도에 적합합니다:

  • Flexbox: 1차원 레이아웃에 최적화 (행 또는 열 중 하나의 방향)
  • Grid: 2차원 레이아웃에 최적화 (행과 열 모두)

일반적으로:

  • 단일 행이나 열의 요소를 정렬할 때는 Flexbox
  • 행과 열이 모두 있는 그리드 레이아웃에는 Grid

브라우저 호환성

Flexbox는 모든 현대 브라우저에서 잘 지원됩니다:

  • Chrome 29+
  • Firefox 22+
  • Safari 6.1+
  • Edge 12+
  • iOS Safari 7.1+
  • Android Browser 4.4+

Internet Explorer 11에서는 부분적으로 지원되며, 일부 버그가 있을 수 있습니다.

자주 묻는 질문

Q: Flexbox에서 요소 간 간격을 주는 가장 좋은 방법은?

A: 최신 브라우저에서는 gap 속성을 사용하는 것이 가장 좋습니다:

.container {
  display: flex;
  gap: 20px;
}

오래된 브라우저에서는 margin을 사용해야 할 수 있습니다.

Q: Flex Item을 특정 너비로 제한하려면?

A: min-width, max-width와 함께 flex-basis를 사용하세요:

.item {
  flex: 1 1 300px;
  max-width: 500px;
}

Q: 특정 Flex Item만 다른 정렬을 갖게 하려면?

A: 해당 아이템에 align-self 속성을 사용하세요:

.special-item {
  align-self: flex-end;
}

Flexbox는 학습 곡선이 있지만, 일단 마스터하면 레이아웃 구성이 훨씬 쉬워집니다. 실험하고 다양한 속성을 조합해보면서 Flexbox의 잠재력을 최대한 활용해보세요!

저작자표시 비영리 변경금지 (새창열림)

'TypeScript > CSS' 카테고리의 다른 글

CSS 선택자 총정리: 원하는 요소를 정확히 타겟팅하는 방법  (0) 2025.05.14
CSS 애니메이션 마스터하기: 자바스크립트 없이 인터랙티브한 웹 만들기  (0) 2025.05.13
반응형 웹 디자인: 모바일부터 데스크톱까지 완벽하게 대응하는 CSS 기법  (1) 2025.05.12
CSS 변수(Custom Properties)로 코드 유지보수 시간 절반으로 줄이기  (2) 2025.05.11
CSS Grid 완벽 가이드: 복잡한 레이아웃도 쉽게 만드는 방법  (0) 2025.05.10
'TypeScript/CSS' 카테고리의 다른 글
  • CSS 애니메이션 마스터하기: 자바스크립트 없이 인터랙티브한 웹 만들기
  • 반응형 웹 디자인: 모바일부터 데스크톱까지 완벽하게 대응하는 CSS 기법
  • CSS 변수(Custom Properties)로 코드 유지보수 시간 절반으로 줄이기
  • CSS Grid 완벽 가이드: 복잡한 레이아웃도 쉽게 만드는 방법
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (730)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (19)
      • 일기장 (4)
      • 파이썬 (131)
        • Basic (42)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (5)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    리스트
    라떼우유
    리뷰관리
    파이썬
    상품 리뷰 크롤링
    programmerlife
    programming101
    스크립트 실행 순서
    learntocode
    codingcommunity
    Python
    셀레니움
    믈레코비타멸균우유
    list
    codingtips
    스크립트 실행
    쇼핑몰리뷰
    devlife
    스마트스토어리뷰
    unity
    ipcamera
    카페24리뷰이관
    rtsp
    긴유통기한우유
    cv2
    유니티
    C#
    appdevelopment
    리뷰이관
    카페24리뷰
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
10분 만에 마스터하는 CSS Flexbox! 복잡한 레이아웃도 쉽게 해결하는 비밀
상단으로

티스토리툴바