Grid(그리드)는 웹 페이지의 레이아웃을 효과적으로 구성하기 위한 CSS 기술로, 행과 열의 구조를 사용하여 유연하고 복잡한 레이아웃을 설계할 때 도움을 주는 도구입니다.
많은 내용을 다루기 때문에, grid container 속성과 grid item 속성을 두 개의 글로 나누어 정리하려고 합니다.
오늘은 grid container 속성에 대해 자세히 살펴보겠습니다.
💡template은 명시적 / auto는 암시적
grid: 블록 특성inline-grid: 인라인 특성repeat 함수로 반복을 적용할 수 있습니다..container {
grid-template-rows: repeat(2, 100px) [row1-start] 1fr;
}fr (fraction, 공간 비율) 단위를 사용할 수 있습니다.repeat 함수로 반복을 적용할 수 있습니다..container {
grid-template-columns: 1fr 2fr repeat(3, 100px);
}.container {
display: grid;
grid-template-rows: repeat(2, 80px);
grid-template-columns: repeat(2, 1fr);
grid-template-areas:
"top-left top-right"
"bottom-left bottom-right";
}
header {grid-area: top-left;}
main {grid-area: top-right;}
footer {grid-area: bottom-left;}
aside {grid-area: bottom-right;}
아이템들을 각각 명시된 그리드 영역에 배치합니다. 이는 코드를 이해하기 쉽게 만들어주고, 그리드 레이아웃을 관리하기 용이하게 합니다.
gap (grid-gap) - 단축 속성row-gap, column-gap의 단축 속성으로 사용됩니다.row-gap, column-gap 을 각각 사용할 수도 있습니다.예시:
.container {
display: grid;
gap: 10px 20px; /* row-gap이 10px, column-gap이 20px인 효과 */
}
grid-auto-rows / grid-auto-columnsauto)예시:
.container {
display: grid;
grid-auto-rows: 50px; /* 암시적 행의 너비가 50px로 설정됨 */
}
grid-auto-flowrow (행 방향)입니다.row, column, dense 등의 값을 가질 수 있습니다.💡 row/column dense: 그리드 아이템이 행/열 우선으로 자동 배치되며, 빈 공간이 있을 경우, 다른 그리드 아이템이 빈 공간을 채우려고 시도합니다.
예시:
.container {
display: grid;
grid-auto-flow: column; /* 아이템을 열 방향으로 자동 배치 */
}
.container {
display: grid;
grid-auto-flow: dense; /* 빈 공간을 채우기 위해 아이템을 조밀하게 배치 */
}
grid-rowgrid-row는 그리드 아이템이 차지할 행의 범위를 지정합니다.
💡 행 번호는 위에서 아래로 증가하며, 음수를 사용하면 아래에서 위로 참조할 수 있습니다.
간단한 예시:
.item {
grid-row: 2 / 4; /* 2행에서 4행까지 차지함 */
grid-row: 1 / -1; /* 1행에서 마지막 행까지 차지함 */
grid-row: span 2; /* 현재 위치에서 2행 차지함 */
}
grid-column:grid-column은 그리드 아이템이 차지할 열의 범위를 지정합니다.
💡 열 번호는 왼쪽에서 오른쪽으로 증가하며, 음수를 사용하면 오른쪽에서 왼쪽으로 참조할 수 있습니다.
간단한 예시:
.item {
grid-column: 2 / 4; /* 2열에서 4열까지 차지함 */
grid-column: 1 / -1; /* 1열에서 마지막 열까지 차지함 */
grid-column: span 2; /* 현재 위치에서 2열 차지함 */
}
grid-areagrid-area 는 그리드 아이템이 차지할 영역을 한 번에 지정합니다.
.item {
grid-area: row-start / column-start / row-end / column-end;
}
예시:
.item {
grid-area: 1 / 2 / 3 / 4; /* 아이템이 1행 2열에서 3행 4열까지 차지함 */
}
💡 grid container 속성 중에는 flex container 속성과 유사한 부분들이 있어, 이에 대해서는 별도로 정리하지 않겠습니다.
내용이 많아, grid item properties 에 대한 내용은 다음 블로그 포스트에서 자세히 다루도록 하겠습니다.