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 }