tutorial
CSS Grid Is Still Underused
Named areas, auto-fill vs auto-fit, subgrid, and animated layouts — the CSS Grid techniques most developers never get around to learning.
CSS Grid shipped in every major browser in 2017. Nine years later, most developers still reach for Flexbox by default and treat Grid as a special-occasion tool. That’s a mistake — Grid solves problems that Flexbox genuinely cannot, and it does so with less markup and more intent. Here are the techniques worth adding to your regular workflow.
Named Grid Areas for Semantic Layouts
The grid-template-areas property lets you describe your layout in ASCII-art form directly in your CSS. It’s not just readable — it makes structural intent explicit in a way that a pile of grid-column and grid-row offsets never will.
.page {
display: grid;
grid-template-columns: 220px 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"sidebar header"
"sidebar main"
"sidebar footer";
min-height: 100vh;
}
.sidebar { grid-area: sidebar; }
.header { grid-area: header; }
.main { grid-area: main; }
.footer { grid-area: footer; }
Changing the layout for a different breakpoint is a single grid-template-areas redeclaration — no touching the HTML, no reordering flex children.
auto-fill vs auto-fit with minmax()
This is the single most powerful responsive technique in Grid, and it requires zero media queries.
/* auto-fill: keeps empty columns; maintains column count */
.grid-fill {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1.5rem;
}
/* auto-fit: collapses empty columns; items stretch to fill */
.grid-fit {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1.5rem;
}
Use auto-fill when you want a fixed implicit grid (useful for skeleton loaders that should maintain structure). Use auto-fit when you want items to expand and fill available space — a card gallery is the classic example. The difference only becomes visible when you have fewer items than columns fit.
When minmax() Falls Short
minmax(min, max) breaks if min is larger than the container width. Always use min() to guard against overflow on narrow screens:
grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr));
This single line produces a fully responsive grid that works from 320px upward without a single media query.
Subgrid for Nested Alignment
The hardest Grid problem used to be aligning content inside nested elements across different grid cells — card titles that don’t line up, footers that float at different heights. Subgrid solves this.
.card-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
}
.card {
display: grid;
grid-row: span 3;
grid-template-rows: subgrid; /* inherit parent row tracks */
gap: 0;
}
.card-image { /* row 1 */ }
.card-body { /* row 2 */ }
.card-footer { /* row 3 — aligned across all cards */ }
With grid-template-rows: subgrid, every card’s footer snaps to the same row track regardless of how much text is in the body. Browser support is now solid across Chrome, Firefox, and Safari.
Animating Grid Layouts
Grid transitions are partially supported via grid-template-columns and grid-template-rows in Chrome and Safari (with interpolate-size: allow-keywords in newer Chrome builds). The most reliable approach today is animating the grid gap and individual cell sizes rather than the template itself:
.expandable-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
transition: gap 300ms ease;
}
.expandable-grid.expanded {
gap: 2.5rem;
}
.expandable-grid .featured {
grid-column: span 2;
transition: grid-column 300ms ease; /* limited support — check caniuse */
}
For production layouts where animation is critical, CSS custom properties combined with calc() inside grid-template-columns give you full control via a single animated variable.
Grid’s depth is what makes it underused — there’s always another layer to learn. But named areas and auto-fit alone are worth the investment today.
Read Next
View Archive →
Mechanical Keyboard Switches: A No-Nonsense Guide
Linear, tactile, or clicky — choosing the wrong switch ruins the experience. Here's how to pick the right one for typing, gaming, and everything in between.
Building a Home Lab on a Budget
Build a capable home lab for under $300 — private cloud storage, VPN, media server, and more. A practical guide to hardware, setup, and what to actually run.