Flexbox와 Grid로 배우는 CSS 레이아웃 비법과 차이점 2가지

Flexbox와 Grid로 웹 개발에서 페이지의 레이아웃을 효율적으로 구성하는 것은 매우 중요한 작업입니다. CSS는 이를 위해 다양한 레이아웃 도구를 제공하는데, 그중 가장 널리 사용되는 두 가지가 바로 Flexbox와 Grid입니다. 이 두 가지 레이아웃 기법은 각각의 장점과 특징이 있어 상황에 따라 적절히 사용할 수 있습니다.

1. Flexbox

1. Flexbox의 개념

Flexbox는 일차원(1D) 레이아웃 시스템입니다. 이는 요소들이 주로 하나의 축(가로 또는 세로)을 따라 정렬되는 구조로, 복잡하지 않은 레이아웃을 구성할 때 유용합니다. Flexbox는 컨테이너의 크기에 따라 아이템들이 유연하게 배치되도록 합니다.

.container {
  display: flex;
  justify-content: center;
  align-items: center;
}

위 코드에서 display: flex는 부모 요소인 컨테이너에 Flexbox 레이아웃을 적용하며, justify-content와 align-items 속성으로 요소들을 수평 및 수직으로 정렬합니다.

2. Flexbox의 주요 속성

Flexbox 레이아웃에서 중요한 속성들은 다음과 같습니다:

  • flex-direction: 주 축(가로 또는 세로)을 설정합니다.
    • row(기본값): 가로 방향으로 요소를 정렬.
    • column: 세로 방향으로 요소를 정렬.
  • justify-content: 주 축을 따라 아이템을 정렬합니다.
    • flex-start: 왼쪽 또는 위쪽에 정렬.
    • center: 가운데에 정렬.
    • space-between: 요소들 간의 간격을 동일하게 설정.
  • align-items: 교차 축(가로 또는 세로)에 따라 아이템을 정렬합니다.
    • stretch(기본값): 아이템을 컨테이너의 크기에 맞게 늘립니다.
    • center: 교차 축에서 가운데 정렬.
  • flex-wrap: 아이템이 컨테이너를 넘어갈 경우 여러 줄로 나뉘어 배치되도록 설정합니다.
.container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

3. Flexbox의 사용 예시

Flexbox는 다음과 같은 경우에 매우 유용합니다:

  • 네비게이션 바와 같은 단일 방향 레이아웃.
  • 간단한 카드 또는 콘텐츠 리스트.
  • 요소 간의 유연한 간격 조정.
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>
.container {
  display: flex;
  justify-content: space-around;
}

위 예제는 3개의 아이템을 가진 컨테이너에서, 아이템들이 수평 방향으로 공간을 균등하게 나누어 정렬되는 것을 보여줍니다.

2. CSS Grid

1. Grid의 개념

CSS Grid는 이차원(2D) 레이아웃 시스템으로, 가로와 세로 축 모두에서 레이아웃을 제어할 수 있습니다. 복잡한 레이아웃 구조를 만들 때 매우 유용하며, 특정한 영역에 요소를 자유롭게 배치할 수 있습니다.

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(2, 100px);
}

위 코드에서 display: grid는 부모 요소에 Grid 레이아웃을 적용하며, grid-template-columns와 grid-template-rows 속성으로 그리드의 구조를 정의합니다.

2. Grid의 주요 속성

Grid 시스템에서는 레이아웃을 보다 정교하게 다룰 수 있는 다양한 속성이 있습니다:

  • grid-template-columns와 grid-template-rows: 각각 그리드의 열과 행을 정의합니다.
    • repeat(3, 1fr): 3개의 열을 같은 비율로 나누는 방식입니다.
    • 1fr은 사용 가능한 공간의 일부를 차지하는 단위를 의미합니다.
  • grid-column과 grid-row: 그리드 항목이 차지할 열과 행을 지정합니다.
    • grid-column: 1 / 3: 첫 번째에서 세 번째 열까지의 공간을 차지합니다.
  • gap: 그리드 항목들 간의 간격을 설정합니다.
.container {
  display: grid;
  grid-template-columns: 1fr 2fr;
  gap: 20px;
}

3. Grid의 사용 예시

Grid 레이아웃은 다음과 같은 경우에 유용합니다:

  • 페이지 전체의 복잡한 레이아웃 구성.
  • 대시보드나 갤러리와 같은 여러 열과 행을 필요로 하는 레이아웃.
  • 특정 위치에 요소를 배치해야 하는 상황.
<div class="container">
  <div class="item">A</div>
  <div class="item">B</div>
  <div class="item">C</div>
  <div class="item">D</div>
</div>
.container {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-rows: 100px 200px;
}

위 예제는 4개의 아이템을 가진 컨테이너에서, 2열 2행으로 구분된 그리드 레이아웃을 보여줍니다. 각 아이템은 지정된 영역 안에 배치됩니다.

3. Flexbox와 Grid의 차이점

1. 일차원 vs 이차원

Flexbox는 한 방향(가로 또는 세로)에서 요소들을 정렬하는 데 특화되어 있는 반면, Grid는 가로와 세로 두 축을 모두 활용하여 보다 복잡한 레이아웃을 구성할 수 있습니다. 따라서 단순한 리스트형 레이아웃은 Flexbox가, 전체 페이지의 복잡한 구성을 필요로 할 때는 Grid가 적합합니다.

2. 유연성

Flexbox는 요소의 크기가 자동으로 늘어나거나 줄어드는 유연한 레이아웃에 강점을 가지고 있으며, Grid는 고정된 레이아웃이나 세밀한 제어가 필요한 경우 유리합니다.

3. 사용 용도

  • Flexbox: 콘텐츠를 자연스럽게 나열하거나 간단한 레이아웃에 적합.
  • Grid: 전체적인 페이지 레이아웃이나 정밀한 배치가 필요한 복잡한 디자인에 적합.

Flexbox와 Grid는 CSS에서 레이아웃을 구성하는 데 매우 유용한 도구들입니다. Flexbox는 간단하고 유연한 레이아웃을 만들기 좋고, Grid는 복잡한 디자인을 보다 직관적이고 세밀하게 다룰 수 있습니다. 상황에 따라 두 가지 기법을 적절히 조합하면 더욱 효율적이고 반응형 웹사이트를 만들 수 있습니다.

이 게시물이 얼마나 유용했습니까?

평점을 매겨주세요.

평균 평점 5 / 5. 투표수: 1

지금까지 투표한 사람이 없습니다. 가장 먼저 게시물을 평가해 주세요.

error: 우클릭이 불가능 합니다.