Phase 3 — Layout
#11 CSS Grid
grid-template, areas, fr, auto-fit
What is CSS Grid?
CSS Grid is a two-dimensional layout system. Unlike Flexbox (one axis), Grid lets you control both rows and columns simultaneously.
Grid container
Basic grid
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 equal columns */
grid-template-rows: auto;
gap: 20px; /* Row and column gap */
}The fr unit and sizing
Column sizing
/* Fixed + flexible */
grid-template-columns: 250px 1fr; /* Sidebar + main */
/* Min/max */
grid-template-columns: minmax(200px, 1fr) 2fr;
/* Responsive auto-fit */
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
/* ↑ Creates as many columns as fit, minimum 280px each */Grid areas
Named grid areas
.layout {
display: grid;
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
grid-template-columns: 250px 1fr 1fr;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }Placing items
Item placement
.item {
grid-column: 1 / 3; /* Span columns 1 to 3 */
grid-row: 2 / 4; /* Span rows 2 to 4 */
}
/* Shorthand */
.full-width {
grid-column: 1 / -1; /* Span all columns */
}
.span-2 {
grid-column: span 2; /* Span 2 columns from current position */
}Alignment
Grid alignment
.grid {
justify-items: center; /* Horizontal alignment of items */
align-items: center; /* Vertical alignment of items */
place-items: center; /* Both at once */
}
.item {
justify-self: end; /* Override for one item */
align-self: start;
}Your turn
Try the CSS Grid commands below:
terminal — browser