CSS Grid is perfect for two-dimensional layouts (rows AND columns)!
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10px;
}
The fr unit means "fraction of available space"
grid-template-columns: 200px 1fr 1fr;
First column is fixed, rest share remaining space
grid-template-columns: repeat(4, 1fr);
/* Same as: 1fr 1fr 1fr 1fr */
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
Resize the browser to see items automatically reflow! Minimum 200px, maximum 1fr.
grid-template-columns: repeat(3, 1fr);
grid-template-rows: 100px 150px 100px;
.span-2-cols { grid-column: span 2; }
.span-2-rows { grid-row: span 2; }
.span-both {
grid-column: span 2;
grid-row: span 2;
}
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
grid-auto-rows: 150px;
gap: 10px;
}
.wide { grid-column: span 2; }
.tall { grid-row: span 2; }
| Property | Description |
|---|---|
grid-template-columns |
Define column tracks |
grid-template-rows |
Define row tracks |
gap |
Space between items |
grid-column |
Item column position/span |
grid-row |
Item row position/span |
grid-template-areas |
Name areas for easy placement |
repeat() |
Repeat track definitions |
minmax() |
Set min and max track size |
auto-fit / auto-fill |
Create responsive grids |