Modern Layout Techniques
Lesson 41 โข Advanced Track
What You'll Learn
- Build the Holy Grail layout with CSS Grid columns and rows
- Use grid-template-areas for readable, named layout regions
- Create the Pancake Stack pattern with Flexbox for sticky footers
- Combine Grid and Flexbox for complex real-world page structures
- Build collapsible sidebar layouts that adapt to mobile
- Implement responsive dashboard layouts with media queries
๐ก Real-World Analogy
CSS Grid for page layout is like an architect's blueprint โ you define rooms (areas) on a floor plan, and each room automatically sizes itself. Flexbox is like arranging furniture within a room โ it handles the details inside each area. Professional layouts use Grid for the building structure and Flexbox for the interior design.
Understanding Modern Layouts
Before CSS Grid, creating full-page layouts required hacks โ floats, clearfixes, absolute positioning, and table-based layouts. These techniques were fragile and hard to maintain. Modern CSS gives us two powerful layout systems that work together: Grid for two-dimensional page structure and Flexbox for one-dimensional component alignment.
This lesson covers four essential layout patterns that appear on virtually every professional website: the Holy Grail (header, footer, main content with two sidebars), the Dashboard (named grid areas for complex admin UIs), the Pancake Stack (header + expanding main + sticky footer), and the Collapsible Sidebar (sidebar that adapts to mobile). These patterns are the building blocks of modern web design.
๐ Layout Pattern Quick Reference
| Pattern | Tool | Key Property | Best For |
|---|---|---|---|
| Holy Grail | Grid | grid-template-columns | Content sites |
| Dashboard | Grid Areas | grid-template-areas | Admin panels |
| Pancake Stack | Flexbox | flex: 1 | Sticky footers |
| Sidebar | Grid | minmax(200px, 25%) | Docs, settings |
Pattern 1: The Holy Grail
The Holy Grail layout uses grid-template-columns: 200px 1fr 200px for fixed sidebars with a flexible center. On mobile, a media query collapses everything to a single column.
Holy Grail Layout
<!DOCTYPE html>
<html><head><style>
body { font-family: system-ui, sans-serif; margin: 0; background: #f5f5f5; }
.page { display: grid; grid-template-columns: 200px 1fr 200px; grid-template-rows: auto 1fr auto; min-height: 100vh; }
header { grid-column: 1 / -1; background: #1976D2; color: white; padding: 16px 24px; font-weight: 700; font-size: 1.2rem; }
.sidebar-left { background: #E3F2FD; padding: 16px; }
main { padding: 24px; }
.sidebar-right { background: #FFF3E0; padding: 16px; }
footer { gr
...Pattern 2: Dashboard with Named Areas
Grid template areas let you name regions and literally draw your layout in CSS. The grid-template-areas property accepts a string per row where each word is an area name. This makes complex layouts incredibly readable and easy to rearrange.
Dashboard with Grid Template Areas
<!DOCTYPE html>
<html><head><style>
body { font-family: system-ui, sans-serif; margin: 0; }
.dashboard { display: grid; grid-template-columns: 240px 1fr 1fr; grid-template-rows: 60px 1fr 200px; grid-template-areas: "nav header header" "nav main stats" "nav footer footer"; min-height: 100vh; gap: 1px; background: #e0e0e0; }
.dashboard > * { background: white; padding: 20px; }
.nav { grid-area: nav; background: #1a1a2e; color: white; }
.nav h2 { color: #e94560; margin-top: 0; font-size: 1.1rem; }
...Pattern 3: Pancake Stack (Sticky Footer)
The Pancake Stack uses display: flex; flex-direction: column; on the body with flex: 1 on the main area. This ensures the footer always sticks to the bottom of the viewport, even when content is short. Inside the main area, CSS Grid handles the card layout.
Pancake Stack with Card Grid
<!DOCTYPE html>
<html><head><style>
* { margin: 0; box-sizing: border-box; }
body { font-family: system-ui, sans-serif; min-height: 100vh; display: flex; flex-direction: column; }
header { background: #1976D2; color: white; padding: 20px 24px; }
header h1 { font-size: 1.2rem; }
main { flex: 1; padding: 32px 24px; max-width: 900px; width: 100%; margin: 0 auto; }
footer { background: #263238; color: #aaa; padding: 20px 24px; text-align: center; }
/* Card Grid inside main */
.cards { display: grid;
...Pattern 4: Collapsible Sidebar
This pattern uses minmax(200px, 25%) to create a sidebar that's proportional but never too narrow. On mobile, the sidebar transforms into a horizontal scrollable tab bar โ a much better UX than hiding it entirely.
Collapsible Sidebar Layout
<!DOCTYPE html>
<html><head><style>
* { margin: 0; box-sizing: border-box; }
body { font-family: system-ui, sans-serif; }
.layout { display: grid; grid-template-columns: minmax(200px, 25%) 1fr; min-height: 100vh; }
.sidebar { background: #f5f5f5; padding: 24px; border-right: 1px solid #e0e0e0; transition: all 0.3s; }
.sidebar h2 { font-size: 1rem; text-transform: uppercase; color: #999; letter-spacing: 1px; margin-bottom: 16px; }
.sidebar a { display: block; padding: 10px 12px; color: #333; text
...When to Use Each Pattern
- Holy Grail: Classic content websites with navigation and supplementary content on the sides (blogs, news sites).
- Dashboard: Admin panels, analytics dashboards, and any UI with distinct named regions. Grid areas make responsive rearrangement trivial.
- Pancake Stack: Any page that needs a sticky footer โ virtually every marketing page, app shell, or single-page layout.
- Collapsible Sidebar: Documentation sites, settings pages, file managers โ anywhere a persistent side menu is needed on desktop.
Common Mistakes
- Using Grid for everything โ Use Flexbox for single-axis alignment (nav items, button groups). Grid shines for 2D page layouts.
- Fixed pixel columns on mobile โ A
200pxsidebar on a 375px screen leaves only 175px for content. Always collapse at a breakpoint. - Forgetting min-height: 100vh โ Without it, sticky footers won't work. The body or grid container needs to fill the viewport.
- Not testing with real content โ Layouts that work with placeholder text often break with longer or shorter real content. Test with varying amounts.
- Overcomplicating responsive changes โ Often you just need to change
grid-template-columnsto1fron mobile. Don't rewrite the entire grid. - Forgetting gap on Grid โ Use
gapinstead of margins on grid children. It's cleaner and doesn't cause collapsing margin issues.
๐ Lesson Complete
- โ
The Holy Grail uses
grid-template-columnswith fixed sidebars and1frcenter - โ
grid-template-areasnames regions for readable, rearrangeable layouts - โ
Pancake Stack:
flex-direction: column+flex: 1on main = sticky footer - โ
minmax(200px, 25%)creates proportional but bounded sidebar widths - โ On mobile, collapse Grid to single column or convert sidebars to horizontal tabs
- โ Use Grid for page structure, Flexbox for component-level alignment
- โ
Always use
gapinstead of margins between grid children - โ Next lesson: Complex Tables for structured data presentation
Sign up for free to track which lessons you've completed and get learning reminders.