CSS Grid
Grid Layout
Terms
- Grid container
- Grid item (direct descendant of grid container)
- Grid line (numbered 1 ... (column+1), 1 ... (row+1) )
- Grid cell
- Grid area (between 4 specified grid lines)
- Grid track (i.e. row or column)
- Grid gap (between grid tracks, also called gutters)
Container element
.container {
display: grid;
grid-template-columns: 1fr 4fr 1fr;
grid-template-rows: auto 1fr 2fr;
grid-template-columns: 40px 50px auto 50px 40px;
grid-template-rows: 25% 100px auto;
grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
grid-template-columns: repeat(3, 20px [col-start]);
grid-template-areas:
"header header header header"
"main main . sidebar"
"footer footer footer footer";
/* shorthand */
grid-template:
[row1-start] "header header header" 25px [row1-end]
[row2-start] "footer footer footer" 25px [row2-end]
/ auto 50px auto;
grid-column-gap: 10px; /* < Safari 12 */
grid-row-gap: 15px; /* < Safari 12 */
column-gap:
row-gap:
gap:
/* child item alignment */
justify-items: center;
align-items: center;
}
Grid item
.item {
grid-column-start:
grid-row-start:
grid-column-end:
grid-row-end:
/* shorthand */
grid-column: 2/4; /* from column line 2 to 4 */
grid-row: 2/3; /* from row line 2 to 3 */
grid-column: 3 / span 2;
grid-row: third-line / 4;
/* short shorthand */
grid-area: 1 / col4-start / last-line / 6;
/* name */
grid-area: header-name;
justify-self: start | end | center | stretch;
align-self: start | end | center | stretch;
place-self: center;
}
grid-column and grid-row
Automatic columns
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr));
gap: 4rem;
}
Grid Auto Flow
automatic number of columns (all 100% width; overflow to the right)
display: grid;
grid-auto-flow: column;
grid-auto-columns: 100%;
same thing but with gap
display: grid;
grid-auto-flow: column;
grid-auto-columns: 1fr;
gap: 1em;
Grid Templates
Repeat
display: grid;
grid-template-columns: repeat(2, min-content);
Min-Max
display: grid;
grid-template-columns: minmax(200px, 400px);
Grid Template Areas
Grid Template Areas Example
.container {
display: grid;
grid-template-columns: 50px 50px 50px 50px;
grid-template-rows: auto;
grid-template-areas:
"header header header header"
"main main . sidebar"
"footer footer footer footer";
}
.item-a {
grid-area: header;
}
.item-b {
grid-area: main;
}
.item-c {
grid-area: sidebar;
}
.item-d {
grid-area: footer;
}
Responsive Example with Breakpoints
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto 1fr 2fr;
grid-template-areas:
"header header"
"main sidebar"
"main sidebar"
"footer footer";
}
.header {
grid-area: header;
}
.main {
grid-area: main;
}
.sidebar {
grid-area: sidebar;
}
.footer {
grid-area: footer;
}
@media screen and (min-width: 800px) {
.container {
grid-template-columns: 1fr 2fr 1fr;
grid-template-areas:
"header header header header"
"main main main sidebar"
"main main main sidebar"
"footer footer footer footer";
}
}