티스토리 뷰

웹 디자인의 세계에서 레이아웃을 잡는 것은 언제나 큰 숙제였습니다. 과거에는 table이나 float을 이용해 어렵게 화면을 구성했지만, 이제는 CSS Grid라는 강력한 도구가 우리 곁에 있습니다.
Flexbox가 1차원(행 또는 열) 레이아웃에 최적화되어 있다면, Grid는 2차원(행과 열 모두) 레이아웃을 자유자재로 설계할 수 있게 해줍니다. 오늘은 Grid의 기초부터 실무에서 바로 쓸 수 있는 예제까지 함께 살펴보겠습니다.
1. Grid의 기본 용어 정리
Grid를 시작하기 전에 반드시 알아야 할 개념들이 있습니다.
- Grid Container (그리드 컨테이너): display: grid;를 선언한 부모 요소입니다. Grid의 전체적인 틀을 정의합니다.
- Grid Item (그리드 아이템): 컨테이너의 직계 자식 요소들입니다.
- Grid Track (그리드 트랙): 그리드의 한 줄(행) 또는 한 칸(열)을 의미합니다.
- Grid Cell (그리드 셀): 그리드의 최소 단위로, 바둑판의 한 칸과 같습니다.
- Grid Gap (그리드 간격): 셀과 셀 사이의 간격을 말합니다.
2. 기본 구조 만들기: columns와 rows
가장 먼저 할 일은 그리드의 규격을 정하는 것입니다.
.container {
display: grid;
/* 3개의 열을 각각 200px, 1fr, 1fr 비율로 생성 */
grid-template-columns: 200px 1fr 1fr;
/* 2개의 행을 100px, 200px 높이로 생성 */
grid-template-rows: 100px 200px;
/* 아이템 사이의 간격 */
gap: 10px;
}
여기서 잠깐! fr 단위란? fr은 'fraction(분수)'의 약자로, 그리드 컨테이너 내에서 사용 가능한 가용 공간을 비율로 나누는 단위입니다. $1fr 2fr$이라고 쓰면 전체를 3으로 나눈 뒤 각각 1/3, 2/3만큼 공간을 차지하게 됩니다.
3. 실전 예제 1: 전형적인 웹사이트 레이아웃 (Holy Grail Layout)
상단 헤더, 왼쪽 사이드바, 중앙 메인 콘텐츠, 하단 푸터가 있는 구조를 Grid로 구현해 보겠습니다. grid-template-areas 속성을 사용하면 코드의 가독성이 획기적으로 좋아집니다.
<div class="layout">
<header>Header</header>
<nav>Sidebar</nav>
<main>Main Content</main>
<footer>Footer</footer>
</div>
.layout {
display: grid;
grid-template-columns: 200px 1fr; /* 사이드바 200px, 메인은 나머지 전체 */
grid-template-rows: auto 1fr auto; /* 헤더/푸터는 내용만큼, 메인은 나머지 전체 */
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
height: 100vh;
gap: 5px;
}
header { grid-area: header; background: #ff7675; }
nav { grid-area: sidebar; background: #74b9ff; }
main { grid-area: main; background: #55efc4; }
footer { grid-area: footer; background: #dfe6e9; }
위의 코드처럼 영역 이름을 지정해 배치하면, 복잡한 레이아웃도 한눈에 파악할 수 있는 지도를 그리는 것과 같습니다.
4. 실전 예제 2: 반응형 이미지 갤러리 (Auto-fill & Minmax)
미디어 쿼리(@media)를 일일이 작성하지 않고도 반응형 레이아웃을 만들 수 있는 기능이 Grid의 진정한 매력입니다.
.gallery {
display: grid;
/* 최소 250px를 보장하되,
공간이 남으면 자동으로 칸을 채워줌(1fr)
*/
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}
.gallery-item {
height: 200px;
background-color: #eee;
border-radius: 8px;
}
이 코드를 사용하면 화면 너비가 좁아지면 칸 수가 줄어들고, 넓어지면 자동으로 늘어나는 유연한 갤러리를 완성할 수 있습니다.
5. 아이템 배치 조절하기: grid-column / grid-row
특정 아이템만 길게 늘리고 싶을 때는 어떻게 할까요?
.special-item {
/* 1번 라인부터 3번 라인 전까지(즉, 2칸) 차지 */
grid-column: 1 / 3;
/* 1번 라인부터 4번 라인 전까지(즉, 3칸) 차지 */
grid-row: 1 / 4;
}
라인 번호는 바둑판의 선을 기준으로 매겨집니다. 3개의 칸이 있다면 라인은 총 4개가 됩니다.
요약 및 팁
- 단순 배치는 Flexbox, 구조적 설계는 Grid: 한 방향 정렬은 Flex가 편하지만, 전체적인 판을 짤 때는 Grid가 압도적입니다.
- 크롬 개발자 도구 활용: 브라우저 개발자 도구(F12)에서 Grid 요소를 클릭하면 가상의 라인 번호를 눈으로 확인할 수 있어 수정이 훨씬 쉬워집니다.
- Repeat 함수 활용: grid-template-columns: repeat(3, 1fr); 처럼 반복되는 패턴을 짧게 줄여 쓰세요.
이제 복잡한 목업 이미지 앞에서도 당황하지 마세요. CSS Grid만 있다면 어떤 레이아웃이든 질서 정연하게 배치할 수 있습니다.
'Frontend > CSS' 카테고리의 다른 글
| CSS 변수(Custom Properties) 완벽 가이드: 효율적인 웹 디자인과 유지보수를 위한 필수 기술 (0) | 2026.02.28 |
|---|---|
| 반응형 웹의 핵심, 미디어 쿼리(Media Query) 작성 가이드 (0) | 2026.02.28 |
| CSS Flexbox 10분 완성: justify-content와 align-items 완벽 정리 (0) | 2026.02.28 |
| CSS Layout 마스터: Position 속성 완벽 정리 (0) | 2026.02.28 |
| 상속(Inheritance)과 우선순위: 내 CSS가 적용되지 않는 이유 (0) | 2026.02.28 |
- Total
- Today
- Yesterday
- on-device ai
- sLLM
- Rag
- CSS
- TypeScript
- 웹기초
- HTML
- HBM
- java
- Nextjs
- 엣지컴퓨팅
- 구글
- MSA
- 협력
- prompt engineering
- AI
- SSR
- LLM
- CSR
- 멀티모달
- 카카오
- Javascript
- react
- 스마트안경
- It용어
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |