프로그래밍/CSS

플렉시블 박스 레이아웃(Flexbox)으로 완벽한 웹 레이아웃 만들기

shimdh 2025. 6. 26. 07:45
728x90

플렉시블 박스 레이아웃(Flexbox)은 현대 웹 디자인에서 필수적인 도구로 자리 잡았습니다. 이 강력한 CSS 레이아웃 모델은 요소들을 효율적으로 배치하고, 반응형 디자인을 구현하는 데 큰 도움을 줍니다. 이번 포스트에서는 플렉스박스의 기본 개념과 주요 속성, 그리고 실용적인 예시를 통해 여러분이 웹 레이아웃을 더욱 매력적으로 만들 수 있는 방법을 소개하겠습니다.

플렉스박스의 기본 개념

1. 주축과 교차축

플렉스박스의 가장 기본적인 개념은 주축(main axis)과 교차축(cross axis)입니다. 주축은 flex-direction 속성에 의해 정의되며, 이는 요소들이 배치되는 방향을 결정합니다.

  • 주축(main axis): 요소들이 나란히 배치되는 방향
    • flex-direction: row: 수평 방향
    • flex-direction: column: 수직 방향
  • 교차축(cross axis): 주축에 수직으로 위치하는 축

이러한 축의 개념을 이해하면, 요소들이 어떻게 배치될지를 보다 명확하게 제어할 수 있습니다.

2. 플렉스 컨테이너 속성

플렉스박스의 레이아웃은 부모 요소인 플렉스 컨테이너에 적용되는 속성들로 구성됩니다. 이 속성들은 자식 요소인 플렉스 아이템의 정렬 방식을 결정합니다.

2.1. justify-content

justify-content 속성은 주축을 따라 아이템을 정렬하는 데 사용됩니다. 다양한 값이 있으며, 각 값은 아이템의 배치 방식을 다르게 합니다.

  • flex-start: 시작 부분으로 정렬
  • flex-end: 끝 부분으로 정렬
  • center: 중앙에 정렬
  • space-between: 아이템 간의 간격을 균등하게 배분
  • space-around: 아이템 주위에 동일한 간격을 둡니다.
.container {
    display: flex;
    justify-content: center; /* 모든 아이템을 중앙에 배치 */
}

2.2. align-items

align-items 속성은 교차축을 따라 아이템을 정렬합니다. 이 속성의 값은 다음과 같습니다.

  • stretch: 기본값; 아이템이 컨테이너의 높이를 채우도록 늘어납니다.
  • flex-start: 교차축의 시작 부분에 정렬
  • flex-end: 교차축의 끝 부분에 정렬
  • center: 수직으로 중앙에 배치
.container {
    display: flex;
    align-items: center; /* 모든 아이템을 수직으로 중앙에 배치 */
}

2.3. align-self

align-self 속성은 개별 플렉스 아이템이 부모의 align-items 설정을 무시하고 특정 경우에 대해 조정할 수 있게 해줍니다.

.item {
    align-self: flex-end; /* 이 아이템만 하단에 정렬 */
}

3. 유연한 아이템 크기

플렉스박스는 각 아이템이 다른 아이템에 비해 얼마나 많은 공간을 차지해야 하는지를 정의할 수 있는 속성을 제공합니다.

  • flex-grow: 여유 공간이 있을 때 아이템이 얼마나 성장할지를 정의합니다(기본값은 0).
  • flex-shrink: 공간이 부족할 때 아이템이 얼마나 줄어들지를 정의합니다(기본값은 1).
.item-1 {
    flex-grow: 2; /* 다른 유연한 형제에 비해 남은 공간의 두 배를 차지 */
}

.item-2 {
    flex-grow: 1;
}
728x90

실용적인 예시

이제 플렉스박스를 활용하여 버튼을 수평 및 수직으로 중앙에 정렬하는 예시를 살펴보겠습니다.

HTML 구조

<section class="button-container">
    <button>버튼 1</button>
    <button>버튼 2</button>
    <button>버튼 3</button>
</section>

CSS 스타일링

.button-container {
    display: flex;
    justify-content: center; /* 버튼을 수평으로 중앙에 배치 */
    align-items: center; /* 버튼을 수직으로 중앙에 배치 */
    height: 200px; /* 수직 중앙 정렬 효과를 위한 높이 설정 */
}

.button-container button {
    margin-left: 10px;
}

위의 예시에서 .button-container는 플렉스 컨테이너 역할을 하며, 두 가지 정렬 속성(justify-contentalign-items)을 효과적으로 사용하여 다양한 화면 크기에서도 잘 적응하는 깔끔한 레이아웃을 생성합니다.

결론

플렉스박스에서의 정렬을 이해하는 것은 더 나은 레이아웃을 디자인하는 데 도움을 줄 뿐만 아니라, 다양한 장치에서의 반응성을 향상시킵니다. 주축과 교차축 모두에서 정렬하는 것과 같은 이러한 개념을 마스터함으로써, 콘텐츠 크기나 뷰포트 크기에 따라 원활하게 조정되는 동적인 인터페이스를 만들 수 있습니다. 정렬 속성의 다양한 값으로 실험해 보면서 자연스럽게 느껴질 때까지 계속 시도해 보세요!

728x90