웹 개발을 하다 보면 요소들을 배치하고 정렬하는 일이 필수적입니다. 이러한 작업을 효율적으로 처리하기 위해 CSS는 여러 가지 레이아웃 방식을 제공합니다. 그중 가장 강력하고 유연한 도구 중 하나가 바로 Flexbox(Flexible Box Layout)입니다. 이번 글에서는 HTML 요소를 스타일링할 때 사용하는 CSS의 flex 속성에 대해 자세히 알아보겠습니다.
Flexbox란 무엇인가?
Flexbox는 CSS Flexible Box Layout 모듈의 약자로, 컨테이너 안에 있는 아이템들을 효율적으로 정렬하고 배치할 수 있도록 설계된 CSS 레이아웃 모델입니다. 기존의 float, table, inline-block과 같은 방식보다 훨씬 간단하면서도 강력한 기능을 제공합니다.
주요 특징
- 축에 따라 정렬: 아이템들을 수평축(main axis)과 수직축(cross axis) 기준으로 배치합니다.
- 유연한 공간 분배: 컨테이너 크기에 따라 아이템 간의 여백과 크기를 자동으로 조정합니다.
- 반응형 디자인에 적합: 다양한 화면 크기에 맞춰 레이아웃을 쉽게 조정할 수 있습니다.
Flexbox의 기본 개념
Flexbox는 두 가지 주요 구성 요소로 이루어집니다:
- Flex Container: Flexbox 레이아웃을 적용하는 부모 요소입니다.
- Flex Items: Flex Container 안에 포함된 자식 요소들입니다.
Flex Container의 속성
Flexbox를 사용하려면 부모 요소에 display: flex 또는 display: inline-flex를 설정해야 합니다. 이 속성을 적용하면 자식 요소들이 자동으로 Flex Items가 됩니다.
<div class="flex-container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
.flex-container {
display: flex;
}
.item {
background-color: lightblue;
border: 1px solid navy;
padding: 10px;
margin: 5px;
}
위 코드에서 .flex-container는 Flex Container이고, .item은 Flex Items입니다.
Flexbox 속성 자세히 알아보기
1. flex-direction
flex-direction 속성은 아이템들을 배치할 주 축(main axis)의 방향을 설정합니다.
- 기본값: row (수평 정렬)
- 다른 값:
- row-reverse: 수평 역방향
- column: 수직 정렬
- column-reverse: 수직 역방향
.flex-container {
display: flex;
flex-direction: column;
}
2. justify-content
justify-content 속성은 주 축(main axis)에서 아이템을 어떻게 정렬할지 결정합니다.
- 값:
- flex-start (기본값): 아이템들을 왼쪽으로 정렬
- flex-end: 아이템들을 오른쪽으로 정렬
- center: 아이템들을 중앙에 정렬
- space-between: 첫 번째와 마지막 아이템은 끝으로, 나머지는 균등 배치
- space-around: 아이템 간 균등 배치 (양쪽 여백 포함)
.flex-container {
display: flex;
justify-content: center;
}
3. align-items
align-items 속성은 교차 축(cross axis)에서 아이템을 어떻게 정렬할지 결정합니다.
- 값:
- stretch (기본값): 아이템을 컨테이너 높이에 맞게 늘림
- flex-start: 위쪽 정렬
- flex-end: 아래쪽 정렬
- center: 중앙 정렬
- baseline: 텍스트 기준선에 맞춰 정렬
.flex-container {
display: flex;
align-items: flex-end;
}
4. flex-wrap
flex-wrap 속성은 아이템들이 컨테이너 크기를 넘어갈 경우 줄 바꿈을 할지 여부를 결정합니다.
- 값:
- nowrap (기본값): 한 줄에 모두 배치
- wrap: 여러 줄로 배치
- wrap-reverse: 줄 바꿈 순서를 반대로
.flex-container {
display: flex;
flex-wrap: wrap;
}
5. align-content
align-content 속성은 여러 줄로 배치된 아이템들이 교차 축에서 어떻게 정렬될지 결정합니다. (단, 아이템이 여러 줄일 경우에만 적용)
- 값:
- stretch (기본값): 줄을 컨테이너 높이에 맞게 늘림
- flex-start: 위쪽 정렬
- flex-end: 아래쪽 정렬
- center: 중앙 정렬
- space-between: 첫 줄과 마지막 줄을 양 끝에 배치
- space-around: 줄 간 균등 배치
.flex-container {
display: flex;
flex-wrap: wrap;
align-content: center;
}
Flex Item의 속성
1. order
order 속성은 아이템의 순서를 조정합니다. 기본값은 0이며, 숫자가 낮을수록 먼저 배치됩니다.
.item {
order: 1;
}
2. flex-grow
flex-grow 속성은 남은 공간을 아이템이 차지할 비율을 설정합니다.
- 기본값: 0 (남은 공간을 차지하지 않음)
.item {
flex-grow: 2;
}
3. flex-shrink
flex-shrink 속성은 컨테이너 크기가 줄어들 때 아이템의 축소 비율을 설정합니다.
- 기본값: 1 (축소 가능)
.item {
flex-shrink: 0;
}
4. flex-basis
flex-basis 속성은 아이템의 기본 크기를 설정합니다.
- 기본값: auto
.item {
flex-basis: 200px;
}
5. flex (단축 속성)
flex는 flex-grow, flex-shrink, flex-basis를 한꺼번에 설정할 수 있는 단축 속성입니다.
.item {
flex: 1 0 auto;
}
Flexbox의 실전 활용
1. 간단한 내비게이션 바
<nav class="navbar">
<div class="logo">Logo</div>
<ul class="menu">
<li>Home</li>
<li>About</li>
<li>Contact</li>
</ul>
</nav>
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
}
.menu {
display: flex;
list-style: none;
}
.menu li {
margin: 0 10px;
}
2. 카드 레이아웃
<div class="card-container">
<div class="card">Card 1</div>
<div class="card">Card 2</div>
<div class="card">Card 3</div>
</div>
.card-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.card {
flex: 1 1 calc(33.333% - 20px);
background-color: lightgray;
padding: 20px;
text-align: center;
}
마무리
CSS Flexbox는 다양한 레이아웃 문제를 간단히 해결할 수 있는 강력한 도구입니다. flex-direction, justify-content, align-items 등 핵심 속성을 이해하고 활용하면 더 깔끔하고 반응형인 웹 디자인을 구현할 수 있습니다. Flexbox의 기초부터 심화까지 숙달하면 개발 생산성이 크게 향상될 것입니다. 꼭 실습하며 익혀보세요!
'개발 > CSS' 카테고리의 다른 글
style css position 이해하기 (0) | 2025.01.09 |
---|---|
style css display 이해하기 (0) | 2025.01.09 |
테이블 Td나 Div에 문자열이 길 경우 말줄임표 기능 표현 (0) | 2019.03.08 |
css 속성 강제적용 important (0) | 2019.02.27 |
CSS media 쿼리 사용 (0) | 2019.02.01 |