Flexbox의 문법(Container와 Item 속성)을 완벽히 암기했다 하더라도, 막상 피그마(Figma) 디자인 시안을 던져주고 코드로 구현하라고 하면 눈앞이 하얘지는 초보 퍼블리셔들이 많습니다. "어? 여기엔 space-between을 써야 하나? flex-grow를 줘야 하나?" 문법과 실전은 완전히 다른 영역이기 때문입니다. 현대 웹사이트의 컴포넌트들을 분석해 보면, 수천 가지의 화려한 UI도 결국 Flexbox를 이용한 5~6가지의 전형적인 레이아웃 패턴의 반복에 불과하다는 것을 깨닫게 됩니다. 이번 13단계 포스팅에서는 글로벌 대기업 웹사이트부터 개인 블로그까지 빠짐없이 등장하는 실무 최다 빈출 Flexbox UI 패턴 5가지의 구현 원리와 코드를 상세히 알아보겠습니다. 이 패턴들만 외워두면 어떤 디자인 시안이 주어져도 1분 안에 HTML 뼈대를 찍어낼 수 있습니다.

패턴 1: 양끝 정렬 GNB (네비게이션 바)
왼쪽에는 회사 로고가 있고, 오른쪽에는 회원가입/로그인 버튼이 있는 전형적인 상단 헤더 메뉴입니다. 과거에는 Float로 양쪽으로 찢었지만, 이제는 space-between 하나로 종결됩니다.
.header-nav {
display: flex;
justify-content: space-between; /* 💡 핵심: 양끝으로 자식들을 밀어냄 */
align-items: center; /* 수직 중앙 정렬 */
padding: 0 20px;
}
패턴 2: 꽉 차는 검색창 (Search Input & Button)
검색 폼에서 '검색 버튼'은 고정된 크기를 유지하고, '텍스트 입력창(Input)'은 화면이 늘어남에 따라 남는 공간을 고무줄처럼 모두 독식하게 만드는 모바일 반응형의 핵심 패턴입니다.
.search-form {
display: flex; /* 요소들을 한 줄로 */
}
.search-input {
flex-grow: 1; /* 💡 핵심: 내가 남는 공간 다 먹을게! (팽창) */
padding: 10px;
}
.search-btn {
flex-shrink: 0; /* 💡 핵심: 창이 좁아져도 난 절대 안 찌그러질거야! */
width: 80px;
}
패턴 3: 미디어 오브젝트 (Media Object)
페이스북 피드, 유튜브 댓글창처럼 왼쪽에 둥근 '프로필 이미지'가 고정되어 있고, 오른쪽에 '텍스트(이름, 내용)'가 유연하게 채워지는 전 세계 공통 UI 패턴입니다.
.media-card {
display: flex;
align-items: flex-start; /* 프로필과 텍스트를 위쪽으로 맞춤 */
gap: 15px; /* 💡 핵심: 최신 gap 속성으로 요소 간 깔끔한 여백 부여 */
}
.profile-img {
flex-shrink: 0; /* 이미지가 텍스트에 밀려 찌그러지는 현상 방지 */
width: 50px; height: 50px; border-radius: 50%;
}
.content-text {
flex-grow: 1; /* 긴 텍스트가 남은 공간을 차지하며 예쁘게 줄바꿈됨 */
}
패턴 4: 하단 고정 푸터 (Sticky Footer)
웹사이트 콘텐츠(본문) 내용이 너무 적어서 푸터(바닥글)가 화면 중간에 붕 떠버리는 흉측한 경험을 해보셨을 겁니다. vh와 flex-direction: column을 조합하면 콘텐츠 길이와 무관하게 푸터를 바닥에 찰싹 고정할 수 있습니다.
body {
display: flex;
flex-direction: column; /* 세로로 쌓기 */
min-height: 100vh; /* 최소 높이를 화면 꽉 차게 설정 */
}
.main-content {
flex-grow: 1; /* 💡 핵심: 본문이 남는 세로 여백을 다 밀어내어 푸터를 바닥으로 쫓아냄! */
}
.footer {
height: 100px; /* 고정 높이 */
}
패턴 5: N등분 갤러리 썸네일 그리드 (Wrap 활용)
인스타그램 피드나 쇼핑몰 상품 리스트처럼, 한 줄에 3개씩(혹은 4개씩) 일정한 크기로 카드를 배치하고 모자라면 아래로 예쁘게 줄바꿈(Wrap) 시키는 기법입니다.
.product-list {
display: flex;
flex-wrap: wrap; /* 💡 핵심: 넘치면 아래로 줄바꿈! */
gap: 20px;
}
.product-item {
/* 3등분(33.333%)에서 여백(gap) 크기를 빼서 균등 분배 */
flex-basis: calc(33.333% - 20px);
}
(최근에는 이러한 2차원 바둑판 배치는 CSS Grid를 사용하는 것이 훨씬 더 강력하고 권장되지만, 레거시 호환성을 위해 Flexbox Wrap 패턴도 반드시 알아두어야 합니다.)
정리하며
이 5가지의 Flexbox 마스터 템플릿만 손과 머리에 완전히 박아둔다면, 여러분은 복잡한 와이어프레임을 마주해도 당황하지 않고 레고 블록 조립하듯 뼈대를 뚝딱 완성해 낼 수 있습니다. 자, 1차원 선(줄) 단위의 정렬을 완벽하게 끝냈으니 이제 가로와 세로, 2차원의 공간을 동시에 조각하는 괴물 같은 기술을 맞이할 시간입니다. 다음 14단계 포스팅에서는 복잡한 바둑판 레이아웃을 한 줄로 끝내버리는 궁극의 병기, "CSS Grid Layout의 탄생과 컨테이너 기본 문법"에 대해 상세히 파헤쳐 보겠습니다!
'StyleSheet > CSS' 카테고리의 다른 글
| [CSS] 웹 타이포그래피와 시각적 디자인 기초 (0) | 2026.08.10 |
|---|---|
| [CSS] CSS 기초와 핵심 개념 완벽 가이드 (0) | 2026.08.10 |
| [CSS] Grid (0) | 2026.07.28 |
| [CSS] Flexbox (2편: Item)(Grow, Shrink) (0) | 2026.07.28 |
| [CSS] Flexbox 컨테이너 속성 (0) | 2026.07.28 |