-
목차
1. 개요
웹 디자인에서 **레이아웃(layout)**은 사용자의 경험과 인터페이스(UI)를 결정짓는 중요한 요소이다. 과거에는 float, table, position을 이용해 레이아웃을 구성했지만, 유지보수와 확장성이 떨어지는 단점이 있었다.
현대 웹 개발에서는 CSS Grid, Flexbox, 그리고 Subgrid를 활용하여 더욱 직관적이고 강력한 방식으로 레이아웃을 구성할 수 있다.
- CSS Grid: 2차원(행 & 열) 레이아웃을 쉽게 구성할 수 있음
- Flexbox: 1차원(가로 또는 세로) 정렬을 유연하게 조정할 수 있음
- Subgrid: CSS Grid 내부에서 하위 요소도 부모의 그리드에 맞출 수 있음
이 글에서는 최신 CSS 기능인 CSS Grid, Flexbox, Subgrid를 상세히 설명하고, 실용적인 예제와 함께 어떻게 활용할 수 있는지 살펴본다.
2. CSS Flexbox – 1차원 레이아웃
1) Flexbox란?
CSS **Flexbox(Flexible Box)**는 1차원 레이아웃을 쉽게 조정할 수 있는 방법으로, 요소를 가로 또는 세로 방향으로 유연하게 정렬할 수 있다.
✅ Flexbox의 특징
- 컨테이너 내부의 요소를 자동으로 정렬
- display: flex 속성을 사용하여 레이아웃을 유연하게 조정
- justify-content, align-items 등을 이용한 간편한 정렬
- 반응형 웹 디자인에 유용함
2) 기본 문법
.container { display: flex; /* Flexbox 활성화 */ justify-content: center; /* 가로 정렬 */ align-items: center; /* 세로 정렬 */ gap: 10px; /* 요소 간격 */ }
<div class="container"> <div class="box">1</div> <div class="box">2</div> <div class="box">3</div> </div>
✅ 주요 속성
속성 설명 display: flex; Flexbox 활성화 flex-direction 주 축 방향 설정 (row, column) justify-content 가로 방향 정렬 (center, space-between 등) align-items 세로 방향 정렬 (center, stretch 등) flex-wrap 요소가 한 줄 또는 여러 줄로 배치될지 결정 3) Flexbox 활용 예제 – 반응형 네비게이션 바
.navbar { display: flex; justify-content: space-between; align-items: center; padding: 10px 20px; }
3. CSS Grid – 2차원 레이아웃
1) CSS Grid란?
CSS Grid는 행(Row)과 열(Column)을 동시에 제어할 수 있는 강력한 레이아웃 시스템이다. 기존 float이나 position 없이도 복잡한 레이아웃을 간단하게 구현할 수 있다.
✅ CSS Grid의 특징
- 2차원(가로 + 세로) 레이아웃 가능
- display: grid 속성을 사용하여 간단하게 레이아웃 구성
- grid-template-columns, grid-template-rows를 이용해 행/열 크기 조정
- 반응형 디자인을 쉽게 구현 가능
2) 기본 문법
.container { display: grid; grid-template-columns: repeat(3, 1fr); /* 3개의 동일한 너비 열 */ grid-template-rows: auto; /* 행 크기 자동 조정 */ gap: 10px; /* 요소 간격 */ }
<div class="container"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> </div>
✅ 주요 속성
속성 설명 display: grid; Grid 활성화 grid-template-columns 열 크기 설정 (repeat(3, 1fr)) grid-template-rows 행 크기 설정 gap 요소 간격 조정 grid-column 특정 열을 차지할 범위 지정 grid-row 특정 행을 차지할 범위 지정 3) CSS Grid 활용 예제 – 카드 레이아웃
.grid-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; }
4. CSS Subgrid – 부모 Grid에 맞춘 하위 레이아웃
1) Subgrid란?
Subgrid는 부모 요소의 grid 설정을 하위 요소에서도 그대로 상속하여 적용할 수 있도록 만든 기능이다. 기존 CSS Grid에서는 하위 요소가 별도로 레이아웃을 설정해야 했지만, Subgrid를 사용하면 부모와 동일한 기준으로 정렬할 수 있다.
✅ Subgrid의 특징
- 부모 grid 설정을 그대로 따름
- 요소 간 정렬을 쉽게 조정 가능
- 복잡한 레이아웃을 더 간결하게 구현
2) 기본 문법
.container { display: grid; grid-template-columns: 1fr 2fr; } .subgrid { display: grid; grid-column: subgrid; }
✅ 주요 속성
속성 설명 display: subgrid; 부모 grid의 설정을 그대로 따름 grid-column: subgrid; 부모의 열 설정을 따름 grid-row: subgrid; 부모의 행 설정을 따름 3) Subgrid 활용 예제 – 복잡한 카드 레이아웃
.container { display: grid; grid-template-columns: repeat(3, 1fr); } .card { display: grid; grid-template-rows: subgrid; }
5. 결론
✅ Flexbox vs. Grid vs. Subgrid 정리
기능 Flexbox CSS Grid Subgrid 레이아웃 유형 1차원 (가로/세로) 2차원 (가로 + 세로) 부모 grid 상속 주요 용도 네비게이션 바, 리스트 정렬 대규모 레이아웃 구성 하위 요소 정렬 개선 정렬 방식 justify-content, align-items grid-template-columns, grid-template-rows grid-column: subgrid - Flexbox: 가로 또는 세로 정렬이 필요한 경우 (네비게이션, 버튼 정렬 등)
- CSS Grid: 전체 레이아웃을 구성할 때 (대시보드, 갤러리 등)
- Subgrid: 부모 grid의 설정을 유지하며 하위 요소를 정렬할 때 사용
최신 CSS 기능을 활용하면 더 효율적이고 직관적인 레이아웃을 구현할 수 있다. 특히, 반응형 웹 디자인과 유지보수성 향상에 큰 도움이 된다. CSS Grid, Flexbox, Subgrid를 적절히 조합하여 최적의 레이아웃을 설계해보자.
'IT & 웹개발' 카테고리의 다른 글
다크 모드(Dark Mode) 구현하는 다양한 방법 (0) 2025.03.19 웹 접근성(Accessibility) 개선을 위한 필수 체크리스트 (0) 2025.03.18 웹사이트 성능 최적화 – TTI(Time to Interactive) 개선 방법 (0) 2025.03.18 Next.js vs. Nuxt.js – 서버 사이드 렌더링(SSR) 프레임워크 비교 (0) 2025.03.18 TypeScript 도입 시 고려해야 할 점 (0) 2025.03.18