웹 페이지의 요소를 유동적으로 배치하여 모든 화면 크기에 대응하게 만드는 CSS 플렉스박스(Flexbox)의 반응형 핵심 속성에 대해 알아보겠습니다.
플렉스박스는 요소의 크기가 불분명하거나 동적일 때도 항목 간의 공간을 배분하고 정렬하는 데 최적화된 1차원 레이아웃 모델입니다.
1. 반응형의 핵심: 가용 공간 배분
요소들이 화면 너비에 따라 늘어나거나 줄어들도록 만드는 3가지 핵심 속성입니다.
- flex-grow: 남는 공간을 얼마나 가져갈지 결정합니다. (기본값 0)
- flex-shrink: 공간이 부족할 때 얼마나 줄어들지 결정합니다. (기본값 1)
- flex-basis: 요소의 기본 크기를 설정합니다. (width와 비슷하지만 플렉스 흐름에 따라 유동적입니다.)
꿀팁: 이 세 가지를 한 번에 쓰는 축약형 flex: 1 1 auto; 방식을 주로 권장합니다.
2. 줄 바꿈 제어: flex-wrap
반응형 디자인에서 가장 중요한 속성 중 하나입니다.
- nowrap: 공간이 좁아져도 한 줄에 억지로 구겨 넣습니다. (기본값)
- wrap: 공간이 부족하면 아이템들이 다음 줄로 자연스럽게 넘어갑니다. 모바일 화면에서 가로로 나열된 메뉴를 세로로 쌓을 때 필수적입니다.
3. 방향 전환: flex-direction
화면 크기에 따라 레이아웃의 축을 바꿀 수 있습니다.
- row: 가로 방향으로 배치합니다. (데스크톱 기본)
- column: 세로 방향으로 배치합니다. (모바일에서 주로 사용)
반응형 전략: 미디어 쿼리를 사용하여 데스크톱에서는 row, 모바일에서는 column으로 변경하는 것이 일반적인 패턴입니다.
🖥️ 실전 예제 코드: "반응형 카드 레이아웃"
미디어 쿼리와 플렉스박스 속성을 조합하여 화면 크기에 따라 변하는 레이아웃을 만들어 보겠습니다.
HTML
<style>
.flex-container {
display: flex;
/* 기본적으로 가로 배치, 공간 부족 시 줄 바꿈 */
flex-wrap: wrap;
gap: 20px;
padding: 20px;
}
.card {
background-color: #f1f1f1;
padding: 20px;
border-radius: 10px;
/* 1:1 비율로 늘어나고 줄어들며, 기본 너비는 300px */
flex: 1 1 300px;
text-align: center;
}
/* 모바일 화면 (너비 600px 이하) */
@media (max-width: 600px) {
.flex-container {
/* 모바일에서는 요소를 세로로 길게 쌓음 */
flex-direction: column;
}
.card {
/* 모바일에서는 기본 너비 제한을 없앰 */
flex-basis: 100%;
}
}
</style>
<div class="flex-container">
<div class="card">카드 1</div>
<div class="card">카드 2</div>
<div class="card">카드 3</div>
</div>
📋 플렉스박스 반응형 속성 요약표
| 속성 | 설명 | 반응형 활용 팁 |
| flex-wrap: wrap | 요소 줄 바꿈 허용 | 모바일에서 요소가 넘치지 않게 함 |
| flex-direction | 배치 방향 설정 | 모바일(column) ↔ 데스크톱(row) 전환 |
| flex-grow: 1 | 빈 공간 가득 채우기 | 화면이 넓어질 때 여백 없이 채움 |
| flex-basis | 요소의 최소/기본 크기 | 미디어 쿼리 없이도 어느 정도 반응형 구현 가능 |
| order | 시각적 배치 순서 변경 | HTML 구조를 바꾸지 않고 요소 순서만 바꿈 |
학습 정리
- 플렉스박스는 1차원(한 방향) 정렬에 특화되어 있어 내비게이션 바나 카드 리스트에 적합합니다.
- **flex-wrap**과 **flex-basis**만 잘 활용해도 복잡한 미디어 쿼리 없이 유연한 레이아웃을 만들 수 있습니다.
- justify-content(가로 정렬)와 align-items(세로 정렬)를 함께 써서 반응형 환경에서도 요소를 중앙에 유지하세요.
모든 기기에 완벽하게 대응하는 플렉스박스 반응형 기술을 정복하셨습니다!

'CSS' 카테고리의 다른 글
| Flex Container property (0) | 2026.02.20 |
|---|---|
| Flex Items property (0) | 2026.02.20 |
| Flexbox game (0) | 2026.02.20 |
| Grid lines and template areas (0) | 2026.02.20 |
| Grid layout property (0) | 2026.02.20 |