
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
| Flexbox | Grid |
|---|---|
| 1차원 (행 또는 열) | 2차원 (행과 열) |
| 컨텐츠 중심 | 레이아웃 중심 |
| 작은 컴포넌트 | 전체 페이지 구조 |
Share this
Html and CSS
Showing 1 to 10 of 70 entries
