SOFTMOA TECHNOLOGY

CSS Flexbox 완전 정복

소프트모아가 정리한 기술 기록입니다.

Contents
작성일 2025. 11. 30.

CSS Flexbox 완전 정복



Flexbox는 1차원 레이아웃을 위한 CSS 모듈로, 요소들을 행(row) 또는 열(column) 방향으로 유연하게 배치할 수 있습니다.



언제 사용하나요?



  • 네비게이션 바, 헤더 레이아웃

  • 카드 리스트 정렬

  • 수직/수평 중앙 정렬

  • 요소 간 균등 배치

  • 반응형 아이템 배치



기본 사용법


.container {
display: flex; /* Flexbox 활성화 */
}

/* 자식 요소들이 자동으로 flex item이 됨 */


주축 방향 (flex-direction)


.container {
display: flex;
flex-direction: row; /* 가로 (기본값) → */
flex-direction: row-reverse; /* 가로 역방향 ← */
flex-direction: column; /* 세로 ↓ */
flex-direction: column-reverse; /* 세로 역방향 ↑ */
}


주축 정렬 (justify-content)


.container {
display: flex;
justify-content: flex-start; /* 시작점 정렬 (기본) */
justify-content: flex-end; /* 끝점 정렬 */
justify-content: center; /* 중앙 정렬 */
justify-content: space-between; /* 양끝 붙이고 균등 배치 */
justify-content: space-around; /* 각 아이템 양옆 동일 간격 */
justify-content: space-evenly; /* 모든 간격 동일 */
}


교차축 정렬 (align-items)


.container {
display: flex;
align-items: stretch; /* 늘려서 채움 (기본) */
align-items: flex-start; /* 위쪽 정렬 */
align-items: flex-end; /* 아래쪽 정렬 */
align-items: center; /* 수직 중앙 */
align-items: baseline; /* 텍스트 기준선 정렬 */
}


완벽한 중앙 정렬


/* 가장 많이 쓰는 패턴 */
.container {
display: flex;
justify-content: center; /* 가로 중앙 */
align-items: center; /* 세로 중앙 */
height: 100vh;
}


줄바꿈 (flex-wrap)


.container {
display: flex;
flex-wrap: nowrap; /* 한 줄 (기본) - 넘치면 축소 */
flex-wrap: wrap; /* 여러 줄 - 넘치면 다음 줄 */
flex-wrap: wrap-reverse; /* 역방향 줄바꿈 */
}


아이템 속성 (flex-grow, flex-shrink, flex-basis)


.item {
flex-grow: 0; /* 남는 공간 차지 비율 (기본 0) */
flex-shrink: 1; /* 공간 부족시 축소 비율 (기본 1) */
flex-basis: auto; /* 기본 크기 */
}

/* 축약형 */
.item {
flex: 0 1 auto; /* grow shrink basis */
flex: 1; /* flex: 1 1 0% - 균등 분배 */
flex: auto; /* flex: 1 1 auto */
flex: none; /* flex: 0 0 auto - 고정 크기 */
}


개별 아이템 정렬 (align-self)


.item {
align-self: auto; /* 컨테이너 설정 따름 */
align-self: flex-start; /* 이 아이템만 위 */
align-self: flex-end; /* 이 아이템만 아래 */
align-self: center; /* 이 아이템만 중앙 */
}


실전 예시 1: 네비게이션 바


.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
height: 60px;
}

.nav-logo { } /* 왼쪽 */
.nav-links { /* 오른쪽 */
display: flex;
gap: 20px;
}


실전 예시 2: 카드 리스트


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

.card {
flex: 1 1 300px; /* 최소 300px, 균등 확장 */
max-width: 400px;
}


실전 예시 3: 푸터 고정


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

.content {
flex: 1; /* 남는 공간 모두 차지 */
}

.footer {
/* 자동으로 하단에 고정 */
}


실전 예시 4: 미디어 객체


.media {
display: flex;
gap: 15px;
}

.media-image {
flex-shrink: 0; /* 이미지 축소 방지 */
width: 80px;
}

.media-content {
flex: 1; /* 텍스트가 나머지 차지 */
}


gap 속성 (간격)


.container {
display: flex;
gap: 20px; /* 모든 간격 */
gap: 10px 20px; /* 행 열 간격 */
row-gap: 10px; /* 행 간격만 */
column-gap: 20px; /* 열 간격만 */
}


order (순서 변경)


.item { order: 0; }     /* 기본값 */
.item:first-child { order: 2; } /* 마지막으로 이동 */
.item:last-child { order: -1; } /* 처음으로 이동 */


Flexbox vs Grid







FlexboxGrid
1차원 (행 또는 열)2차원 (행과 열)
컨텐츠 중심레이아웃 중심
작은 컴포넌트전체 페이지 구조
Share this

Html and CSS

Have a questions?

견적 및 기술문의

mobile : 010-7931-4813

Contact Form