Basic grid
.container1 { display: grid; grid-template-columns: 200px 20px 200px 20px 200px 20px 200px; grid-template-rows: 150px 150px; }
The gap
property
.container2 { display: grid; grid-template-columns: 200px 200px 200px 200px; grid-template-rows: 150px 150px; gap: 20px; }
A responsive grid
.container3 { display: grid; grid-template-columns: 25% 25% 25% 25%; grid-template-rows: 150px 150px; gap: 20px; }
.container4 { display: grid; grid-template-columns: calc((100% - 60px) / 4) calc((100% - 60px) / 4) calc((100% - 60px) / 4) calc((100% - 60px) / 4); grid-template-rows: 150px 150px; gap: 20px; }
The repeat()
function
.container5 { display: grid; grid-template-columns: repeat(4, calc((100% - 60px) / 4)); grid-template-rows: 150px 150px; gap: 20px; }
The fr
unit
.container6 { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: 150px 150px; gap: 20px; }
Placing grid items
A
B
C
D
Auto-placement occurs when no placement properties are applied on the children. By default, each grid item will take up the space of 1 grid cell.
A
B
C
D
p:first-child { grid-column: 2 / 4; grid-row: 1 / 3; }
Overlapping grid items
A
B
C
D
p:first-child { grid-column: 2 / span 2; grid-row: 1 / span 2; } p:nth-child(2) { grid-column: 1 / span 2; grid-row: 1; } p:nth-child(3) { grid-column: 3/ span 2; grid-row: 2; }
Named grid areas
A
B
C
D
.container6 { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: 150px 150px; gap: 20px; grid-template-areas: 'a a . c' '. b b c'; } p:first-child { grid-area: a } p:nth-child(2) { grid-area: b } p:nth-child(3) { grid-area: c }