Zeno ZENO

Part 8: Flexbox & Grid 심화 + Subgrid

Part 8: Flexbox & Grid 심화 + Subgrid

레이아웃은 CSS에서 가장 많이 사용하는 영역 중 하나입니다. 기본적인 Flexbox와 Grid 사용법은 이미 알고 있을 가능성이 높지만, 실무에서 자주 쓰이는 고급 기능과 특히 Subgrid에 대해 제대로 이해하고 있으면 훨씬 더 효율적이고 깔끔한 레이아웃을 만들 수 있습니다.

이번 파트에서는 단순한 사용법을 넘어, 실제 프로젝트에서 자주 필요한 패턴과 Subgrid를 중심으로 자세히 알아보겠습니다.

1. Flexbox의 고급 활용

Flexbox는 여전히 많은 상황에서 유용합니다. 특히 한 줄로 정렬하거나, 요소 간 간격을 균등하게 배분할 때 강력합니다.

.nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

.nav-links {
  display: flex;
  align-items: center;
  gap: 24px;
}

.actions {
  display: flex;
  align-items: center;
  gap: 12px;
}

flex-wrapflex-shrink를 적절히 사용하면 반응형에도 강력하게 대응할 수 있습니다.

.card-list {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}

.card {
  flex: 1 1 300px; /* 최소 300px, 남는 공간을 균등하게 분배 */
}

2. Grid의 강력한 기능

Grid는 2차원 레이아웃(행과 열)을 다룰 때 가장 강력합니다. 특히 repeat(), minmax(), auto-fit 조합은 실무에서 매우 자주 사용됩니다.

.product-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px;
}

auto-fitminmax()를 함께 사용하면 화면 크기에 따라 자동으로 컬럼 수가 조절되는 반응형 그리드를 쉽게 만들 수 있습니다.

3. Subgrid — Grid의 숨겨진 강력 기능

AD

제휴 광고 · 일부 링크는 수수료를 받을 수 있습니다

톨루나 팝업패널리워드 회원가입

subgrid는 부모 그리드의 트랙을 자식 요소가 그대로 상속받을 수 있게 해주는 기능입니다. 특히 카드 내부에 여러 요소가 있고, 모든 카드의 레이아웃을 통일하고 싶을 때 매우 유용합니다.

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 24px;
}

.card {
  display: grid;
  grid-template-rows: subgrid;
  grid-row: span 4; /* 4줄을 차지하게 함 */
  background: white;
  border-radius: 16px;
  overflow: hidden;
}

.card .image {
  grid-row: 1;
}

.card .content {
  grid-row: 2 / span 2;
  padding: 20px;
  display: flex;
  flex-direction: column;
}

.card .footer {
  grid-row: 4;
  padding: 0 20px 20px;
}

Subgrid를 사용하면 각 카드의 높이가 달라도 내부 요소들의 정렬을 깔끔하게 맞출 수 있습니다.

4. 실무에서 자주 쓰이는 Grid 패턴

/* 성능이 중요한 대형 그리드 */
.performance-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 16px;
  contain: layout style; /* 성능 최적화 */
}

/* 헤더 + 사이드바 + 메인 레이아웃 */
.app-layout {
  display: grid;
  grid-template-columns: 280px 1fr;
  grid-template-rows: auto 1fr;
  grid-template-areas:
    "header header"
    "sidebar main";
  min-height: 100vh;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }

5. 정리

Grid + Subgrid 조합은 복잡한 레이아웃을 더 예측 가능하고, 유지보수하기 쉽게 만들어줍니다. 특히 디자인 시스템이나 카드 기반의 UI를 많이 만드는 경우 Subgrid를 적극적으로 활용하는 것을 추천합니다.

다음 파트에서는 애니메이션과 View Transitions API를 자세히 다루겠습니다.

AD

제휴 광고

일부 링크는 제휴 링크이며, 구매 또는 가입 시 일정 수수료를 받을 수 있습니다.

AD

'2026 모던 CSS' 카테고리의 다른 글

전체보기