CSS Grid full reference: grid-template-areas, subgrid, masonry, responsive breakpoints, auto-fit/auto-fill, grid placement, named areas, modern container queries, and production layout patterns for complex responsive designs.
CSS Grid 2023: Responsive Layouts Complete Mastery Guide 🚀
- CSS Grid creates complex 2D layouts with native responsiveness, subgrid, masonry, container queries, named grid areas, and auto-fit placement.
- Zero JavaScript, zero frameworks, perfect browser support (96%+). Powers dashboard layouts, e-commerce grids, magazine designs, and enterprise UIs.
🎯 CSS Grid vs Flexbox vs Legacy Methods
| Feature | Flexbox | CSS Grid | Floats/Tables |
|---|---|---|---|
| 1D Layout | Best | Good | Poor |
| 2D Layout | ❌ | Best | Hacky |
| Responsive | Good | Best | Manual |
| Alignment | Excellent | Excellent | Poor |
| Gaps | ❌ | Native | Hacks |
| Bundle Size | 0KB | 0KB | 0KB |
Rule:
- Flexbox = 1D (navbars, buttons).
- Grid = 2D (pages, cards, dashboards).
🏗️ CSS GRID SYNTAX (Essential Properties)
.grid {
/* Define grid */
display: grid;
grid-template-columns: repeat(12, 1fr); /* 12-column */
grid-template-rows: 80px auto 60px; /* Header, main, footer */
gap: 2rem; /* Native gaps */
/* Named areas */
grid-template-areas:
"header header header"
"sidebar main main "
"footer footer footer";
}
🎨 NAMED GRID AREAS (Dashboard Layout)
.dashboard {
display: grid;
grid-template-columns: 250px 1fr 300px;
grid-template-rows: 80px auto 1fr auto;
gap: 2rem;
min-height: 100vh;
grid-template-areas:
"header header header"
"sidebar main stats "
"sidebar content stats"
"footer footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.content { grid-area: content; }
.stats { grid-area: stats; }
.footer { grid-area: footer; }
<div class="dashboard">
<header class="header">Header</header>
<nav class="sidebar">Sidebar</nav>
<main class="main">Main Content</main>
<section class="content">Content</section>
<aside class="stats">Stats</aside>
<footer class="footer">Footer</footer>
</div>
📱 RESPONSIVE GRIDS (auto-fit + auto-fill)
/* Cards grid - Perfect responsive */
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
padding: 2rem;
}
/* Full-width first item */
.hero-grid {
display: grid;
grid-template-columns: 1fr;
gap: 2rem;
@media (min-width: 768px) {
grid-template-columns: 2fr 1fr;
grid-template-areas:
"hero sidebar"
"cards cards";
}
}
🎯 GRID PLACEMENT (Precise Control)
/* Explicit placement */
.feature {
grid-column: 1 / 4; /* Start line 1, end line 4 */
grid-row: 1 / 3; /* 2 rows tall */
}
.wide-feature {
grid-column: 1 / -1; /* Full width */
grid-row: span 2; /* Span 2 rows */
}
.sticky-sidebar {
grid-row: 1 / -1; /* Full height */
align-self: start;
}
🆕 SUBGRID (2023 Game-Changer)
/* Parent grid */
.parent {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 2rem;
}
/* Child inherits parent's tracks */
.cards {
display: grid;
grid-template-columns: subgrid;
gap: 1rem;
}
.card:nth-child(1) { grid-column: 1; }
.card:nth-child(2) { grid-column: 2 / 4; }
🧱 MASONRY LAYOUT (CSS Native)
.masonry {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
grid-auto-rows: 10px; /* Small row increments */
gap: 1rem;
}
.item {
grid-row-end: span 15; /* Varying heights */
grid-row-end: span 20;
grid-row-end: span 12;
}
📐 CONTAINER QUERIES (Modern Responsive)
.card-container {
container-type: inline-size;
}
@container (min-width: 400px) {
.card {
grid-template-columns: 1fr 2fr; /* 2-col inside card */
}
}
@container (min-width: 600px) {
.card {
display: grid;
grid-template-areas: "image content";
}
}
🎨 COMPLETE DASHBOARD EXAMPLE
/* Production dashboard */
.dashboard {
display: grid;
grid-template-columns:
minmax(250px, 300px) /* Sidebar */
1fr /* Main */
minmax(300px, 400px); /* Stats */
grid-template-rows:
auto /* Header */
1fr /* Content */
auto; /* Footer */
min-height: 100vh;
gap: 0 2rem;
padding: 2rem;
grid-template-areas:
"header header header"
"sidebar main stats"
"footer footer footer";
}
/* Responsive */
@media (max-width: 1200px) {
.dashboard {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"sidebar"
"main"
"stats"
"footer";
}
}
<div class="dashboard">
<header class="header p-6 bg-gradient-to-r from-blue-600 to-purple-600 text-white">
<h1>Dashboard</h1>
</header>
<aside class="sidebar bg-gray-50 p-6 rounded-2xl shadow-sm">
Navigation
</aside>
<main class="main grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
<!-- Cards grid -->
<div class="card bg-white p-6 rounded-2xl shadow-lg">Card 1</div>
<div class="card bg-white p-6 rounded-2xl shadow-lg">Card 2</div>
</main>
<aside class="stats bg-gradient-to-b from-blue-50 to-indigo-50 p-6 rounded-2xl shadow-sm">
Statistics
</aside>
<footer class="footer mt-auto p-6 text-center text-gray-500">
© 2023 Company
</footer>
</div>
🔧 ADVANCED GRID PATTERNS
1. Asymmetric Grid (Magazine Layout)
.magazine {
display: grid;
grid-template-columns:
[first] 1fr
[main-start] 2fr
[main-end] 1fr
1fr;
grid-template-rows:
auto
1fr
auto;
gap: 2rem;
}
.feature { grid-column: first / main-end; }
.content-main { grid-column: main-start / main-end; }
2. Auto-Flow Dense
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
grid-auto-flow: dense; /* Fill gaps */
gap: 1.5rem;
}
.wide { grid-column: span 2; }
.tall { grid-row: span 2; }
📱 RESPONSIVE BREAKPOINTS (Container-First)
@container (min-width: 600px) {
.cards {
grid-template-columns: repeat(2, 1fr);
}
}
@container (min-width: 900px) {
.cards {
grid-template-columns: repeat(3, 1fr);
}
}
🎯 GRID ALIGNMENT (Perfect Control)
.grid {
justify-items: start; /* Horizontal */
align-items: center; /* Vertical */
justify-content: center; /* Container horizontal */
align-content: start; /* Container vertical */
place-items: center; /* Shorthand */
place-content: center; /* Shorthand */
}
🚀 PRODUCTION CHECKLIST
- ✅ grid-template-areas (Named layout)
- ✅ repeat(auto-fit, minmax()) (Responsive)
- ✅ Subgrid (Nested grids)
- ✅ Container queries (@container)
- ✅ Masonry (grid-auto-rows + span)
- ✅ Gap (Native spacing)
- ✅ Explicit placement (grid-column/row)
- ✅ Auto-flow: dense (Optimal packing)
- ✅ Responsive stacking (Media queries)
📊 BROWSER SUPPORT (2023)
| Feature | Chrome | Firefox | Safari | Edge |
|---|---|---|---|---|
| CSS Grid | ✅ 57+ | ✅ 52+ | ✅ 10.1+ | ✅ 16+ |
| Subgrid | ✅ 117+ | ✅ 71+ | ✅ 16.4+ | ✅ 117+ |
| Masonry | ✅ 121+ | ✅ 109+ | ✅ 17.2+ | ✅ 121+ |
| Container Queries | ✅ 105+ | ✅ 110+ | ✅ 16+ | ✅ 105+ |
🎯 VS FLEXBOX DECISION MATRIX
- SIMPLE 1D → Flexbox (Navbar, buttons)
- COMPLEX 2D → Grid (Dashboards, cards)
- CONTENT → Grid (Articles, masonry)
- FORMS → Flexbox (Inputs, labels)
- CSS Grid 2023 = Native responsive layouts solved.
- Zero JS, perfect browser support, container queries, subgrid = Lighthouse 100/100 Performance + enterprise-grade layouts.
Continue Reading