꿈소년의 개발 이야기
[ Do it! HTML + CSS 웹 표준의 정석 스터디!] 12 CSS 그리드 레이아웃으로 배치하기 본문
DAY 17
🔖 오늘 읽은 범위 :
☃️01/27(화) 진도표 알림
❄️공부 내용: 12 CSS 그리드 레이아웃으로 배치하기
❄️ 쪽수: 373~392쪽
- 격자 형태로 요소를 배치할 수 있음.
- 플렉스 박스 레이아웃과 함께 사용 가능함.
CSS 그리드 레이아웃 사용하기
CSS 그리드 레이아웃 용어
- 그리드 항목을 배치할 때 가로와 세로 방향 모두 사용함.
- 플렉스 항목은 1차원 이나, CSS 그리드 레이아웃은 2차원 적임.
- 배치할 항목을 컨테이너로 묶어야 함.
- 구조
- 부모 요소 : 그리드 컨테이너
- 자식 요소 : 그리드 항목 또는 셀(cell)
- 가로 방향 : 행(row)
- 세로 방향 : 열(column)
- 간격
CSS 그리드 레이아웃 항목을 배치하는 속성
그리드 컨테이너 지정 : display 속성
- grid : 블록 레벨의 그리드 컨테이너 생성.
- inline-grid : 인라인 레벨의 그리드 컨테이너 생성.
열과 행을 지정 : grid-template-columns, grid-template-rows
grid-template-columns : 그리드 열 크기(너비)와 개수 지정. 각 열의 너비를 순서대로 나열.
grid-template-rows : 그리드 행 크기(높이)와 개수 지정. 각 행의 높이를 순서대로 결정.
<style> .container { display: grid; /* grid container 지정 */ grid-template-columns: 100px 100px 100px; /* 열 너비 지정 */ grid-template-rows: 50px 100px; /* 행 높이 지정 */ } </style>
동적 행 높이 지정 : grid-auto-rows 속성
동적으로 변경되는 것에 대한 대응. 행의 개수를 알 수 없음.
행의 높이를 지정함.
<style> .container { display: grid; grid-template-columns: 100px 200px 300px; grid-auto-rows: 100px; } </style>
상대적인 크기 지정 : fr 단위(fraction)
열이나 행의 크기를 픽셀(px)을 이용하면 항상 크기가 고정됨.
상대적인 크기 지정을 위해서 필요함.
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: 2fr 1fr 2fr; // 열 너비 2:1:2
반복 되는 값 표현 : repeat() 함수
표현 되는 값을 여러 번 반복 할 때 간단하게 표현할 수 있음.
grid-template-columns: repeat(3, 1fr);
최솟값과 최댓값 지정 : minmax() 함수
행 높이를 고정하지 않고 최솟값과 최댓값을 사용해 유연하게 지정 처리 가능함.
내용이 많아도 다 표시 할 수 있게 높이를 늘린다거나 최소 높이를 지정하게 해둘 수 있음.
<style> .container { width:600px; border: 1px solid #ccc; display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: minmax(100px, auto); } </style>
빈공간 자동 채우기 : auto-fit 속성, auto-fill 속성
repeat , minmax 함수를 이용해 최소 크기 100px 인 그리드 항목 5개 표시
grid-template-columns: repeat(5, minmax(100px, 1fr));위 방법은 1행에 몇 개의 열을 배치할지 알아야 함.
개수를 고정하거나 매번 지정하기 어려울 때 사용 가능함.
- auto-fit : 그리드 컨테이너 너비를 가득 채우도록 그리드 항목을 확장함. 내용이 많지 않은 경우에도 넓게 확장 시키므로 반응형 동작할 때 유의해서 사용해야 함.
- auto-fill : 그리드 항목 너비를 지정한 크기 만큼 유지하고 남은 공간이 있을 경우 그대로 유지함.

그리드 항목의 간격 조절 : gap 속성
그리드 컨테이너 안에서 그리드 항목 간격 지정하지 않으면 서로 붙어서 배치 됨.
항목 간격 조정을 위해서 필요함.
예전에는 grid-column-gap, grid-row-gap 으로 사용했으나, 지금은 gap 속성 하나로 통일 됨.
값 지정이 1개 일 경우, 열 간격과 행 간격을 동일하게 적용.
값 지정이 2개 일 경우, 1번째 값은 행 간격, 2번째 값은 열 간격 적용.
gap: 20px 30px; /* 행 간격 20px, 열 간격 30px */
그리드 라인과 템플릿 영역으로 배치하기
- 좀 더 복잡한 레이아웃 만들기 위한 그리드 라인과 템플릿 영역.
그리드 라인을 사용해 배치하기
그리드 레이아웃에는 눈에 보이지 않는 그리드 라인이 포함되어 있음.
개발자 도구 → ‘grid’ 표시 클릭 → 그리드 라인과 번호가 함께 표시 됨.
표시되는 그리드 라인과 번호를 이용해서 그리드 항목을 배치할 수 있음.
그리드 라인에서 항목 배치에 사용하는 속성
속성 설명 예시 grid-column-start 열의 시작 번호 지정. grid-column-start: 1; grid-column-end 열의 끝 번호 지정. grid-column-end: 4 grid-column 열의 시작과 끝 번호 지정. 슬래시(/)로 구분. grid-column: 1 / 4; grid-row-start 행의 시작 번호 지정. grid-row-start: 2; grid-row-end 행의 끝 번호 지정. grid-row-end: 4; grid-row 행의 시작과 끝 번호 지정. 슬래시(/)로 구분. grid-row: 2 / 4; 항목 배치
/* 열 1라인 ~ 4라인 차지. */ grid-column: 1 / 4; /* 열 1 라인에서 끝까지 차지. */ grid-column: 1 / -1;해당 속성을 빼도 기본적으로 열 1개나 행 1개를 차지함.
.container {
width: 700px;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
gap: 1rem;
}
.box {
padding: 15px;
color: #fff;
text-align: center;
}
.box1 {
background-color: #3689ff;
grid-column: 1 / -1; /* grid-column: 1 / 4; */
grid-row-start: 1; /* grid-row: 1 / 2; */
}
.box2 {
background-color: #00cf12;
grid-column-start: 1; /* grid-column: 1/2; */
grid-row: 2 / -1; /* grid-row: 2/4; */
}
.box3 {
background-color: #ff9019;
grid-column: 2/-1; /* grid-column: 2/4; */
grid-row-start: 2; /* grid-row: 2/3; */
}
.box4 {
background-color: #ffd000;
grid-column-start: 2; /* grid-column: 2/3; */
grid-row-start: 3; /* grid-row: 3/4; */
}
.box5 {
background-color: #ff3f3f;
grid-column: 3 / -1; /* grid-column: 3/4; */
grid-row: 3 / -1; /* grid-row: 3/4; */
}
템플릿 영역을 사용해 배치하기
그리드 라인 시작 번호와 끝 번호를 일일이 지정해서 만드는 것은 불편한 점이 있음.
보다 쉽게 그리드 항목을 배치하는 방법.
grid-area:<영역이름>;
grid-template-areas 속성에서 원하는 형태로, 생각한 형태로 배치 한다.
큰 따옴표(”) 안에 나열하여 템플릿 영역을 배치한다.
.container { width: 700px; display: grid; grid-template-rows: repeat(3, 100px); gap: 1rem; grid-template-areas: "box1 box1 box1" "box2 box3 box3" "box2 box4 box5" ; } .box { padding: 15px; color: #fff; text-align: center; } .box1 { background-color: #3689ff; grid-area: box1; } .box2 { background-color: #00cf12; grid-area: box2; } .box3 { background-color: #ff9019; grid-area: box3; } .box4 { background-color: #ffd000; grid-area: box4; } .box5 { background-color: #ff3f3f; grid-area: box5; }
- 템플릿 영역을 이용해서 하는 게 매우 편리함.
- 웹 페이지 전체 구성을 할 때 이렇게 하면 될 것 같다는 생각이 듬.
- 반응형 웹 구성을 염두에 두고 작업하는 것은 생각보다 쉽진 않음.
🤟소감 3줄 요약
- HTML 과 CSS 역할이 다름을 계속 주지하고 인지해야 할 것 같다.
- 뭔가 작업해야 할 게 있는데, 이게 HTML 에서 할지, CSS 에서 할지 결정할 때,
딱 정해져야 할 기준을 계속 생각해봐야겠다. - 벌써 책 절반을 넘어간다. 야호~
'Do it 스터디!' 카테고리의 다른 글
| [ Do it! HTML + CSS 웹 표준의 정석 스터디!] 13 CSS 고급 선택자(1) (0) | 2026.01.31 |
|---|---|
| [ Do it! HTML + CSS 웹 표준의 정석 스터디!] 12장 되새김 문제 (0) | 2026.01.29 |
| [ Do it! HTML + CSS 웹 표준의 정석 스터디!] 11장 되새김 문제 (0) | 2026.01.26 |
| [ Do it! HTML + CSS 웹 표준의 정석 스터디!] 11 플렉스 박스 레이아웃으로 배치하기 (1) | 2026.01.24 |
| [ Do it! HTML + CSS 웹 표준의 정석 스터디!] 10 반응형 웹과 미디어 쿼리 (0) | 2026.01.24 |
