CSS
CSS Grid Advanced
Master complex grid layouts with named lines, subgrids, and advanced positioning techniques for professional web designs.
CSS Grid becomes incredibly powerful when you go beyond the basics. Grid areas, named lines, and advanced positioning give you surgical control over complex layouts — the kind Netflix and Apple use for their sophisticated interfaces.Grid Template Areas
Grid areas let you draw your layout with text. Instead of counting columns and rows, you name sections of your grid and arrange them visually in your CSS. Think of it like sketching a website layout on paper./* WanderLust homepage layout with named areas */
.homepage-grid {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"sidebar content ads"
"footer footer footer";
min-height: 100vh;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.ads { grid-area: ads; }
.footer { grid-area: footer; }What just happened?
The grid-template-areas property creates a visual map of your layout. Each quoted string represents a row, and each word represents a column. Items automatically flow to their named areas. Try this: change "sidebar content ads" to "content content sidebar" to move the sidebar right.
Named Grid Lines
Instead of referring to grid lines by number, you can give them names. This makes your CSS more readable and easier to maintain. Named lines work like street addresses — instead of "third line from the left," you say "sidebar-start."/* WanderLust destination cards with named lines */
.destination-grid {
display: grid;
grid-template-columns:
[sidebar-start] 200px
[content-start] 1fr
[featured-start] 300px
[featured-end];
grid-template-rows:
[header-start] 80px
[main-start] 1fr
[main-end];
gap: 20px;
}
.featured-destination {
grid-column: featured-start / featured-end;
grid-row: header-start / main-end;
}What just happened?
Named lines in square brackets create reference points. featured-start / featured-end positions the featured destination across specific grid lines. grid-row: header-start / main-end makes it span multiple rows. Try this: add more named lines for precise control.
Auto-Placement and Dense Packing
Grid can automatically place items for you using intelligent algorithms. The grid-auto-flow property controls how items fill empty spaces.dense packing fills holes by moving smaller items up — perfect for photo galleries.
/* WanderLust photo gallery with smart auto-placement */
.photo-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-auto-rows: 150px;
grid-auto-flow: dense;
gap: 16px;
}
.photo-large {
grid-column: span 2;
grid-row: span 2;
}
.photo-wide {
grid-column: span 2;
}What just happened?
grid-auto-flow: dense lets smaller photos move up to fill gaps left by larger ones. span 2 makes items stretch across two columns or rows. auto-fit creates responsive columns that adapt to screen size. Try this: remove "dense" to see items stay in source order.
Grid Item Alignment
While grid handles the overall layout, alignment properties fine-tune how content sits within each grid cell. You can align entire items or just their content — giving you pixel-perfect control over spacing and positioning./* WanderLust booking form with precise alignment */
.booking-form {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(4, 80px);
gap: 20px;
align-items: center; /* Center items vertically */
justify-items: stretch; /* Stretch items horizontally */
}
.form-title {
grid-column: 1 / -1; /* Span full width */
justify-self: center; /* Override and center this item */
align-self: start; /* Override and align to top */
}What just happened?
align-items: center vertically centers all grid items. justify-items: stretch makes them fill their cells horizontally. justify-self and align-self override the container rules for individual items. Try this: change "center" to "start" or "end".
Implicit Grid and Auto-Sizing
When you place items outside your defined grid, CSS creates an implicit grid automatically. The grid-auto-rows and grid-auto-columns properties control the size of these automatically-generated tracks./* WanderLust testimonials that expand automatically */
.testimonials {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 200px); /* Only define 2 rows */
grid-auto-rows: 150px; /* Auto-created rows will be 150px */
grid-auto-flow: column; /* Fill columns first */
gap: 20px;
}
/* Items 7+ will create new columns automatically */
.testimonial:nth-child(n+7) {
background: #7c3aed; /* Purple for overflow items */
}What just happened?
The grid defined 3 columns × 2 rows (6 cells), but we have 8 testimonials. grid-auto-flow: column creates new columns for extras. grid-auto-rows: 150px sizes any automatically-created rows. Try this: change to "row" flow to see vertical expansion.
Minmax() and Flexible Sizing
The minmax() function creates truly responsive grids. Instead of fixed sizes, you set minimum and maximum boundaries. Columns and rows can shrink and grow within those limits, creating layouts that adapt perfectly to any screen size./* WanderLust destination cards with smart sizing */
.destination-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
grid-template-rows: minmax(200px, auto);
gap: 24px;
}
.featured-card {
grid-column: 1 / -1; /* Span full width */
grid-template-columns: minmax(300px, 2fr) minmax(200px, 1fr);
display: grid; /* Nested grid for internal layout */
gap: 20px;
}What just happened?
minmax(280px, 1fr) creates cards that never shrink below 280px but can grow to fill available space. auto-fit adjusts column count based on available width. The nested grid inside the featured card creates a two-column internal layout. Try this: resize the window to see responsive behavior.
Grid Areas
Visual layout mapping with named sections
Named Lines
Reference points for precise positioning
Auto-Placement
Smart item positioning with dense packing
Minmax Sizing
Flexible dimensions with smart boundaries
Pro Tip
Start with grid-template-areas to sketch your layout visually, then add minmax() for responsiveness. This approach scales from simple pages to complex applications without media query overload.
Quiz
1. The WanderLust team wants to create a homepage layout with a header across the top, sidebar on the left, main content in the center, and footer across the bottom. What's the main advantage of using grid-template-areas for this layout?
2. WanderLust's destination cards need to be responsive but never too narrow to read. Which approach creates cards that adapt to screen size while maintaining a minimum readable width?
3. WanderLust's photo gallery has images of different sizes creating gaps in the layout. What does grid-auto-flow: dense accomplish?
Up Next: Responsive Design
Master mobile-first design, breakpoints, and fluid layouts that work perfectly on every device from phone to desktop.