CSS Grid 레이아웃은 2차원(2D) 레이아웃을 위한 CSS의 강력한 도구로, 행(row)과 열(column) 모두에서 아이템을 배치할 수 있는 유연성을 제공합니다. Flexbox가 단일 축에서의 배치에 강점을 가진다면, Grid는 여러 행과 열을 조합한 복잡한 레이아웃을 쉽게 구현할 수 있습니다. 그리드 레이아웃을 사용하면 콘텐츠 영역을 자유롭게 정의하고 배치할 수 있어, 특히 반응형 웹 디자인에서 매우 효과적입니다.
1. 그리드 컨테이너(Grid Container)와 그리드 아이템(Grid Item)
Grid 레이아웃은 다음 두 가지 요소로 구성됩니다:
- Grid Container(그리드 컨테이너): 그리드 레이아웃을 정의하는 부모 요소입니다. display: grid 속성을 통해 설정됩니다.
- Grid Item(그리드 아이템): 그리드 컨테이너 안에 위치한 자식 요소들로, 그리드 셀에 배치됩니다.
예시
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr; /* 세 개의 동일한 열을 정의 */
grid-template-rows: auto; /* 행의 높이를 자동으로 조절 */
gap: 10px; /* 그리드 아이템 간의 간격 */
}
.item {
background-color: lightblue;
padding: 20px;
}
HTML:
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
이 예시에서 .container는 Grid 컨테이너이며, grid-template-columns를 사용해 세 개의 열로 나누고 있습니다.
2. 그리드 트랙(Grid Track)과 그리드 셀(Grid Cell)
- 그리드 트랙(Grid Track)은 그리드의 행(row) 또는 열(column)을 나타내는 선입니다. grid-template-columns와 grid-template-rows 속성으로 트랙을 정의할 수 있습니다.
- 그리드 셀(Grid Cell)은 그리드에서 각 아이템이 배치되는 공간을 의미합니다.
예시
.container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 세 개의 동일한 열 */
grid-template-rows: 100px 200px; /* 첫 번째 행은 100px, 두 번째 행은 200px */
}
HTML:
<div class="container">
<div class="item">A</div>
<div class="item">B</div>
<div class="item">C</div>
<div class="item">D</div>
<div class="item">E</div>
</div>
3. grid-template-columns와 grid-template-rows: 그리드의 열과 행 정의
grid-template-columns와 grid-template-rows는 그리드의 열과 행을 정의하는 데 사용됩니다. 각각 열의 너비와 행의 높이를 설정하며, fr 단위는 비율을 나타냅니다. 예를 들어 1fr은 가용 공간을 균등하게 나누는 것을 의미합니다.
예시
.container {
display: grid;
grid-template-columns: 200px 1fr 2fr; /* 첫 번째 열은 200px, 나머지는 비율로 나눔 */
}
4. 그리드 간격(gap)과 grid-auto-rows
gap 속성은 그리드 아이템 간의 간격을 정의합니다. grid-auto-rows는 컨텐츠에 따라 행의 높이를 자동으로 조정하는 데 사용됩니다.
예시
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px; /* 아이템 간 20px의 간격 */
grid-auto-rows: minmax(100px, auto); /* 최소 100px, 필요에 따라 자동으로 확장 */
}
HTML:
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
5. grid-area로 그리드 아이템 위치 지정
grid-area 속성은 그리드 아이템이 컨테이너 내에서 어느 영역에 배치될지 명확히 정의할 수 있습니다. grid-row와 grid-column 속성으로 개별 아이템의 위치를 설정할 수 있습니다.
예시
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
}
.item1 {
grid-area: 1 / 1 / 2 / 3; /* 첫 번째 행, 첫 번째 열에서 두 번째 열까지 차지 */
}
HTML:
<div class="container">
<div class="item item1">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
6. 반응형 디자인을 위한 Grid 활용
CSS Grid는 반응형 웹사이트를 만들기에도 아주 효과적입니다. 미디어 쿼리와 함께 사용하면 다양한 화면 크기에서 그리드 레이아웃을 쉽게 조정할 수 있습니다.
예시
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
@media (max-width: 600px) {
.container {
grid-template-columns: 1fr; /* 작은 화면에서는 한 열로 배치 */
}
}
참고 사이트
'HTML&CSS' 카테고리의 다른 글
[CSS] 13. 반응형 웹 디자인 - 미디어 쿼리 (0) | 2024.09.20 |
---|---|
[CSS] 12. 변형과 애니메이션(웹사이트에 동적 요소 추가하기) (0) | 2024.09.20 |
[CSS] 11. 색상과 배경(색상 모델과 배경 속성) (0) | 2024.09.18 |
[CSS] 10. 타이포그래피(폰트 설정 및 텍스트 스타일링) (0) | 2024.09.18 |
[CSS] 8. Flexbox (0) | 2024.09.18 |
[CSS] 7. float와 clear (0) | 2024.09.17 |
[CSS] 6. 박스 모델 (Margin, Padding, Border, Content) (2) | 2024.09.16 |
[CSS] 5. 우선순위와 상속 (0) | 2024.09.15 |