Master complex layout patterns using advanced Grid and Flexbox techniques. Build holy grail layouts, masonry grids, and professional card systems.
Complex layout patterns are the hallmark of professional web design. These sophisticated arrangements go beyond simple grids and flex containers to create visually compelling, functionally superior user interfaces.
In this lesson, you'll master the most sought-after layout patterns in modern web development: the holy grail layout, masonry grids, sophisticated card systems, and dynamic content arrangements. These patterns form the backbone of contemporary websites and applications.
The holy grail layout is the most requested layout pattern in web development - a flexible layout with header, footer, and three columns where the center column is fluid and side columns are fixed width.
Modern Holy Grail with CSS Grid:
1.holy-grail {
2 min-height: 100vh;
3 display: grid;
4 grid-template-areas:
5 "header header header"
6 "nav main aside"
7 "footer footer footer";
8 grid-template-rows: auto 1fr auto;
9 grid-template-columns: 200px 1fr 200px;
10}
11
12.header { grid-area: header; }
13.nav { grid-area: nav; }
14.main { grid-area: main; }
15.aside { grid-area: aside; }
16.footer { grid-area: footer; }Responsive Holy Grail:
1@media (max-width: 768px) {
2 .holy-grail {
3 grid-template-areas:
4 "header"
5 "nav"
6 "main"
7 "aside"
8 "footer";
9 grid-template-columns: 1fr;
10 }
11}This pattern provides the perfect foundation for most web applications and content sites.
Masonry layouts arrange items of varying heights into a grid-like pattern with minimal gaps, similar to a brick wall pattern.
CSS-Only Masonry with Grid:
1.masonry-grid {
2 display: grid;
3 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
4 gap: 1rem;
5 grid-auto-rows: max-content;
6}
7
8/* Simulate masonry effect */
9.masonry-item:nth-child(3n+1) {
10 grid-row-end: span 2;
11}
12
13.masonry-item:nth-child(3n+2) {
14 grid-row-end: span 3;
15}Advanced Masonry with Column Count:
1.masonry-columns {
2 column-count: 3;
3 column-gap: 1rem;
4 column-fill: balance;
5}
6
7.masonry-columns .item {
8 break-inside: avoid;
9 margin-bottom: 1rem;
10 display: inline-block;
11 width: 100%;
12}
13
14@media (max-width: 768px) {
15 .masonry-columns {
16 column-count: 2;
17 }
18}Masonry layouts are perfect for portfolios, image galleries, and content feeds with varying heights.
Professional card layouts require sophisticated techniques to handle varying content, maintain consistency, and provide excellent user experience.
Equal Height Card System:
1.card-grid {
2 display: grid;
3 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
4 gap: 2rem;
5 align-items: stretch; /* Equal height cards */
6}
7
8.card {
9 display: flex;
10 flex-direction: column;
11 background: white;
12 border-radius: 8px;
13 overflow: hidden;
14 box-shadow: 0 2px 8px rgba(0,0,0,0.1);
15}
16
17.card-content {
18 flex: 1;
19 padding: 1.5rem;
20 display: flex;
21 flex-direction: column;
22}
23
24.card-actions {
25 margin-top: auto;
26 padding: 1rem 1.5rem;
27 background: #f8f9fa;
28}Staggered Card Layout:
1.staggered-cards {
2 display: grid;
3 grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
4 gap: 2rem;
5 grid-auto-rows: min-content;
6}
7
8.staggered-cards .card:nth-child(even) {
9 transform: translateY(2rem);
10}Advanced card systems create professional, consistent layouts that scale beautifully across all devices.
A comprehensive demonstration of complex layout patterns including holy grail, masonry, and advanced card systems.
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>Complex Layout Patterns</title>
7 <style>
8 * {
9 margin: 0;
10 padding: 0;
11 box-sizing: border-box;
12 }
13
14 body {
15 font-family: 'Inter', -apple-system, sans-serif;
16 line-height: 1.6;
17 color: #2d3748;
18 background: #f7fafc;
19 }
20
21 /* Layout Controls */
22 .controls {
23 position: fixed;
24 top: 1rem;
25 right: 1rem;
26 z-index: 1000;
27 display: flex;
28 gap: 0.5rem;
29 background: white;
30 padding: 1rem;
31 border-radius: 8px;
32 box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
33 }
34
35 .controls button {
36 padding: 0.5rem 1rem;
37 border: 2px solid #e2e8f0;
38 background: white;
39 border-radius: 4px;
40 cursor: pointer;
41 font-size: 0.875rem;
42 transition: all 0.2s;
43 }
44
45 .controls button:hover,
46 .controls button.active {
47 border-color: #3182ce;
48 background: #3182ce;
49 color: white;
50 }
51
52 /* Container */
53 .layout-container {
54 max-width: 1400px;
55 margin: 0 auto;
56 padding: 2rem;
57 min-height: 100vh;
58 }
59
60 .pattern-title {
61 text-align: center;
62 font-size: 2rem;
63 font-weight: 700;
64 margin-bottom: 3rem;
65 color: #1a202c;
66 }
67
68 /* Holy Grail Layout */
69 .holy-grail {
70 display: none;
71 min-height: 80vh;
72 grid-template-areas:
73 "header header header"
74 "sidebar main aside"
75 "footer footer footer";
76 grid-template-rows: auto 1fr auto;
77 grid-template-columns: 200px 1fr 200px;
78 gap: 1rem;
79 background: white;
80 border-radius: 12px;
81 overflow: hidden;
82 box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
83 }
84
85 .holy-grail.active {
86 display: grid;
87 }
88
89 .holy-grail .header {
90 grid-area: header;
91 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
92 color: white;
93 padding: 2rem;
94 text-align: center;
95 }
96
97 .holy-grail .sidebar {
98 grid-area: sidebar;
99 background: #edf2f7;
100 padding: 1.5rem;
101 }
102
103 .holy-grail .main {
104 grid-area: main;
105 padding: 2rem;
106 background: white;
107 }
108
109 .holy-grail .aside {
110 grid-area: aside;
111 background: #f7fafc;
112 padding: 1.5rem;
113 }
114
115 .holy-grail .footer {
116 grid-area: footer;
117 background: #2d3748;
118 color: white;
119 padding: 1.5rem;
120 text-align: center;
121 }
122
123 /* Navigation List */
124 .nav-list {
125 list-style: none;
126 }
127
128 .nav-list li {
129 padding: 0.5rem 0;
130 border-bottom: 1px solid #cbd5e0;
131 }
132
133 .nav-list a {
134 color: #4a5568;
135 text-decoration: none;
136 }
137
138 .nav-list a:hover {
139 color: #3182ce;
140 }
141
142 /* Masonry Layout */
143 .masonry-layout {
144 display: none;
145 }
146
147 .masonry-layout.active {
148 display: block;
149 }
150
151 .masonry-grid {
152 column-count: 3;
153 column-gap: 2rem;
154 column-fill: balance;
155 }
156
157 .masonry-item {
158 break-inside: avoid;
159 margin-bottom: 2rem;
160 background: white;
161 border-radius: 12px;
162 overflow: hidden;
163 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
164 transition: transform 0.2s;
165 display: inline-block;
166 width: 100%;
167 }
168
169 .masonry-item:hover {
170 transform: translateY(-4px);
171 box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
172 }
173
174 .masonry-item img {
175 width: 100%;
176 height: auto;
177 display: block;
178 }
179
180 .masonry-content {
181 padding: 1.5rem;
182 }
183
184 .masonry-title {
185 font-size: 1.125rem;
186 font-weight: 600;
187 margin-bottom: 0.5rem;
188 }
189
190 .masonry-text {
191 color: #718096;
192 font-size: 0.875rem;
193 line-height: 1.5;
194 }
195
196 /* Card Layout System */
197 .card-layout {
198 display: none;
199 }
200
201 .card-layout.active {
202 display: block;
203 }
204
205 .card-grid {
206 display: grid;
207 grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
208 gap: 2rem;
209 align-items: stretch;
210 }
211
212 .card {
213 background: white;
214 border-radius: 12px;
215 overflow: hidden;
216 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
217 transition: all 0.3s ease;
218 display: flex;
219 flex-direction: column;
220 }
221
222 .card:hover {
223 transform: translateY(-8px);
224 box-shadow: 0 12px 28px rgba(0, 0, 0, 0.15);
225 }
226
227 .card-image {
228 height: 200px;
229 background: linear-gradient(45deg, #667eea, #764ba2, #f093fb, #f5576c);
230 position: relative;
231 overflow: hidden;
232 }
233
234 .card-content {
235 padding: 2rem;
236 flex: 1;
237 display: flex;
238 flex-direction: column;
239 }
240
241 .card-title {
242 font-size: 1.25rem;
243 font-weight: 700;
244 margin-bottom: 1rem;
245 color: #1a202c;
246 }
247
248 .card-description {
249 color: #718096;
250 margin-bottom: 1.5rem;
251 flex: 1;
252 }
253
254 .card-stats {
255 display: flex;
256 gap: 2rem;
257 margin-bottom: 1.5rem;
258 padding: 1rem;
259 background: #f7fafc;
260 border-radius: 8px;
261 }
262
263 .stat {
264 text-align: center;
265 }
266
267 .stat-value {
268 font-size: 1.5rem;
269 font-weight: 700;
270 color: #3182ce;
271 }
272
273 .stat-label {
274 font-size: 0.75rem;
275 color: #718096;
276 text-transform: uppercase;
277 letter-spacing: 0.5px;
278 }
279
280 .card-actions {
281 display: flex;
282 gap: 1rem;
283 }
284
285 .btn {
286 padding: 0.75rem 1.5rem;
287 border: none;
288 border-radius: 6px;
289 font-weight: 500;
290 cursor: pointer;
291 transition: all 0.2s;
292 flex: 1;
293 text-align: center;
294 }
295
296 .btn-primary {
297 background: #3182ce;
298 color: white;
299 }
300
301 .btn-primary:hover {
302 background: #2c5aa0;
303 }
304
305 .btn-secondary {
306 background: #e2e8f0;
307 color: #4a5568;
308 }
309
310 .btn-secondary:hover {
311 background: #cbd5e0;
312 }
313
314 /* Staggered Effect */
315 .staggered .card:nth-child(even) {
316 transform: translateY(2rem);
317 }
318
319 .staggered .card:nth-child(even):hover {
320 transform: translateY(calc(2rem - 8px));
321 }
322
323 /* Responsive Design */
324 @media (max-width: 1024px) {
325 .holy-grail {
326 grid-template-areas:
327 "header header"
328 "sidebar main"
329 "aside aside"
330 "footer footer";
331 grid-template-columns: 200px 1fr;
332 }
333
334 .masonry-grid {
335 column-count: 2;
336 }
337
338 .card-grid {
339 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
340 }
341 }
342
343 @media (max-width: 768px) {
344 .layout-container {
345 padding: 1rem;
346 }
347
348 .controls {
349 position: static;
350 margin-bottom: 2rem;
351 flex-wrap: wrap;
352 }
353
354 .holy-grail {
355 grid-template-areas:
356 "header"
357 "main"
358 "sidebar"
359 "aside"
360 "footer";
361 grid-template-columns: 1fr;
362 grid-template-rows: auto auto auto auto auto;
363 }
364
365 .masonry-grid {
366 column-count: 1;
367 }
368
369 .card-grid {
370 grid-template-columns: 1fr;
371 }
372
373 .staggered .card:nth-child(even) {
374 transform: none;
375 }
376
377 .staggered .card:nth-child(even):hover {
378 transform: translateY(-8px);
379 }
380 }
381
382 /* Demo Content Styling */
383 .demo-content {
384 line-height: 1.8;
385 }
386
387 .demo-highlight {
388 background: linear-gradient(120deg, #a8edea 0%, #fed6e3 100%);
389 padding: 0.2rem 0.5rem;
390 border-radius: 4px;
391 font-weight: 500;
392 }
393 </style>
394</head>
395<body>
396 <div class="layout-container">
397 <!-- Controls -->
398 <div class="controls">
399 <button onclick="showPattern('holy-grail')" class="pattern-btn active">Holy Grail</button>
400 <button onclick="showPattern('masonry')" class="pattern-btn">Masonry</button>
401 <button onclick="showPattern('cards')" class="pattern-btn">Card System</button>
402 </div>
403
404 <!-- Holy Grail Layout -->
405 <div class="holy-grail active" id="holy-grail-pattern">
406 <h2 class="pattern-title" style="grid-area: header; margin: 0;">Holy Grail Layout Pattern</h2>
407
408 <nav class="sidebar">
409 <h3 style="margin-bottom: 1rem; color: #2d3748;">Navigation</h3>
410 <ul class="nav-list">
411 <li><a href="#">Dashboard</a></li>
412 <li><a href="#">Projects</a></li>
413 <li><a href="#">Team</a></li>
414 <li><a href="#">Analytics</a></li>
415 <li><a href="#">Settings</a></li>
416 </ul>
417 </nav>
418
419 <main class="main">
420 <h3 style="margin-bottom: 1.5rem;">Main Content Area</h3>
421 <div class="demo-content">
422 <p>This is the <span class="demo-highlight">flexible main content area</span> that expands and contracts based on available space. The holy grail layout is perfect for:</p>
423 <ul style="margin: 1rem 0; padding-left: 2rem;">
424 <li>Dashboard interfaces</li>
425 <li>Content management systems</li>
426 <li>Documentation sites</li>
427 <li>E-commerce product pages</li>
428 </ul>
429 <p>The layout automatically adapts to different screen sizes while maintaining optimal proportions and usability.</p>
430 </div>
431 </main>
432
433 <aside class="aside">
434 <h3 style="margin-bottom: 1rem; color: #2d3748;">Sidebar</h3>
435 <div style="background: white; padding: 1rem; border-radius: 6px; margin-bottom: 1rem;">
436 <h4 style="margin-bottom: 0.5rem;">Quick Stats</h4>
437 <p style="font-size: 0.875rem; color: #718096;">Users: 1,423</p>
438 <p style="font-size: 0.875rem; color: #718096;">Views: 12.4k</p>
439 </div>
440 <div style="background: white; padding: 1rem; border-radius: 6px;">
441 <h4 style="margin-bottom: 0.5rem;">Recent Activity</h4>
442 <p style="font-size: 0.875rem; color: #718096;">Project updated</p>
443 <p style="font-size: 0.875rem; color: #718096;">New user joined</p>
444 </div>
445 </aside>
446
447 <footer class="footer">
448 <p>Footer content spans the full width • Perfect for copyright, links, and secondary information</p>
449 </footer>
450 </div>
451
452 <!-- Masonry Layout -->
453 <div class="masonry-layout" id="masonry-pattern">
454 <h2 class="pattern-title">Masonry Layout System</h2>
455 <div class="masonry-grid">
456 <div class="masonry-item">
457 <div style="height: 200px; background: linear-gradient(45deg, #667eea, #764ba2);"></div>
458 <div class="masonry-content">
459 <h3 class="masonry-title">Design System</h3>
460 <p class="masonry-text">Complete design system with components, tokens, and guidelines for consistent user experiences.</p>
461 </div>
462 </div>
463
464 <div class="masonry-item">
465 <div style="height: 300px; background: linear-gradient(45deg, #f093fb, #f5576c);"></div>
466 <div class="masonry-content">
467 <h3 class="masonry-title">Mobile App Design</h3>
468 <p class="masonry-text">Modern mobile application interface with intuitive navigation and engaging user interactions.</p>
469 </div>
470 </div>
471
472 <div class="masonry-item">
473 <div style="height: 150px; background: linear-gradient(45deg, #4facfe, #00f2fe);"></div>
474 <div class="masonry-content">
475 <h3 class="masonry-title">Web Dashboard</h3>
476 <p class="masonry-text">Analytics dashboard with data visualization and real-time updates.</p>
477 </div>
478 </div>
479
480 <div class="masonry-item">
481 <div style="height: 250px; background: linear-gradient(45deg, #43e97b, #38f9d7);"></div>
482 <div class="masonry-content">
483 <h3 class="masonry-title">E-commerce Platform</h3>
484 <p class="masonry-text">Full-featured online store with product catalogs, shopping cart, and payment processing.</p>
485 </div>
486 </div>
487
488 <div class="masonry-item">
489 <div style="height: 180px; background: linear-gradient(45deg, #fa709a, #fee140);"></div>
490 <div class="masonry-content">
491 <h3 class="masonry-title">Brand Identity</h3>
492 <p class="masonry-text">Complete brand identity package including logo, colors, typography, and usage guidelines.</p>
493 </div>
494 </div>
495
496 <div class="masonry-item">
497 <div style="height: 220px; background: linear-gradient(45deg, #a8edea, #fed6e3);"></div>
498 <div class="masonry-content">
499 <h3 class="masonry-title">Portfolio Website</h3>
500 <p class="masonry-text">Creative portfolio showcasing design work with interactive elements and smooth animations.</p>
501 </div>
502 </div>
503 </div>
504 </div>
505
506 <!-- Card Layout System -->
507 <div class="card-layout" id="cards-pattern">
508 <h2 class="pattern-title">Advanced Card System</h2>
509 <div class="card-grid staggered">
510 <div class="card">
511 <div class="card-image"></div>
512 <div class="card-content">
513 <h3 class="card-title">Professional Dashboard</h3>
514 <p class="card-description">Comprehensive analytics dashboard with real-time data visualization, customizable widgets, and team collaboration features.</p>
515 <div class="card-stats">
516 <div class="stat">
517 <div class="stat-value">2.4k</div>
518 <div class="stat-label">Users</div>
519 </div>
520 <div class="stat">
521 <div class="stat-value">98%</div>
522 <div class="stat-label">Uptime</div>
523 </div>
524 <div class="stat">
525 <div class="stat-value">4.9</div>
526 <div class="stat-label">Rating</div>
527 </div>
528 </div>
529 <div class="card-actions">
530 <button class="btn btn-primary">View Demo</button>
531 <button class="btn btn-secondary">Learn More</button>
532 </div>
533 </div>
534 </div>
535
536 <div class="card">
537 <div class="card-image"></div>
538 <div class="card-content">
539 <h3 class="card-title">E-commerce Solution</h3>
540 <p class="card-description">Complete online store platform with inventory management, payment processing, and advanced analytics for growing businesses.</p>
541 <div class="card-stats">
542 <div class="stat">
543 <div class="stat-value">15k</div>
544 <div class="stat-label">Sales</div>
545 </div>
546 <div class="stat">
547 <div class="stat-value">99.9%</div>
548 <div class="stat-label">Secure</div>
549 </div>
550 <div class="stat">
551 <div class="stat-value">24/7</div>
552 <div class="stat-label">Support</div>
553 </div>
554 </div>
555 <div class="card-actions">
556 <button class="btn btn-primary">Start Free</button>
557 <button class="btn btn-secondary">Compare</button>
558 </div>
559 </div>
560 </div>
561
562 <div class="card">
563 <div class="card-image"></div>
564 <div class="card-content">
565 <h3 class="card-title">Mobile App Framework</h3>
566 <p class="card-description">Cross-platform mobile development framework with native performance, rich UI components, and seamless device integration.</p>
567 <div class="card-stats">
568 <div class="stat">
569 <div class="stat-value">500k</div>
570 <div class="stat-label">Apps</div>
571 </div>
572 <div class="stat">
573 <div class="stat-value">60fps</div>
574 <div class="stat-label">Speed</div>
575 </div>
576 <div class="stat">
577 <div class="stat-value">iOS/Android</div>
578 <div class="stat-label">Platforms</div>
579 </div>
580 </div>
581 <div class="card-actions">
582 <button class="btn btn-primary">Get Started</button>
583 <button class="btn btn-secondary">Documentation</button>
584 </div>
585 </div>
586 </div>
587
588 <div class="card">
589 <div class="card-image"></div>
590 <div class="card-content">
591 <h3 class="card-title">Design System Tools</h3>
592 <p class="card-description">Comprehensive design system toolkit with components, tokens, documentation, and collaboration tools for design teams.</p>
593 <div class="card-stats">
594 <div class="stat">
595 <div class="stat-value">200+</div>
596 <div class="stat-label">Components</div>
597 </div>
598 <div class="stat">
599 <div class="stat-value">12</div>
600 <div class="stat-label">Themes</div>
601 </div>
602 <div class="stat">
603 <div class="stat-value">A11y</div>
604 <div class="stat-label">Accessible</div>
605 </div>
606 </div>
607 <div class="card-actions">
608 <button class="btn btn-primary">Explore</button>
609 <button class="btn btn-secondary">Preview</button>
610 </div>
611 </div>
612 </div>
613 </div>
614 </div>
615 </div>
616
617 <script>
618 function showPattern(pattern) {
619 // Hide all patterns
620 document.querySelectorAll('.holy-grail, .masonry-layout, .card-layout').forEach(el => {
621 el.classList.remove('active');
622 });
623
624 // Remove active class from buttons
625 document.querySelectorAll('.pattern-btn').forEach(btn => {
626 btn.classList.remove('active');
627 });
628
629 // Show selected pattern
630 if (pattern === 'holy-grail') {
631 document.getElementById('holy-grail-pattern').classList.add('active');
632 event.target.classList.add('active');
633 } else if (pattern === 'masonry') {
634 document.getElementById('masonry-pattern').classList.add('active');
635 event.target.classList.add('active');
636 } else if (pattern === 'cards') {
637 document.getElementById('cards-pattern').classList.add('active');
638 event.target.classList.add('active');
639 }
640 }
641 </script>
642</body>
643</html>This comprehensive showcase demonstrates advanced layout patterns:
🏛️ Holy Grail Layout:
🧱 Masonry Layout System:
🃏 Advanced Card Systems:
📱 Professional Features:
These patterns form the foundation of modern web interfaces and can be adapted for any professional project.
Outstanding work mastering complex layout patterns! You've now learned the most sophisticated layout techniques in modern web development. Next, we'll explore Browser Support & Fallbacks, where you'll learn to implement these advanced patterns while ensuring compatibility across different browsers and providing graceful fallbacks for older systems.
Your progress is saved in this browser, on this device only.