The Holy Grail layout helps you create a webpage with a header, footer, and three columns in the middle. It keeps the main content in the center and sidebars on the sides.
Holy grail layout in Tailwind
<div class="flex flex-col min-h-screen"> <header class="bg-gray-300 p-4">Header</header> <main class="flex flex-1"> <aside class="w-1/4 bg-gray-200 p-4">Left Sidebar</aside> <section class="flex-1 bg-white p-4">Main Content</section> <aside class="w-1/4 bg-gray-200 p-4">Right Sidebar</aside> </main> <footer class="bg-gray-300 p-4">Footer</footer> </div>
Use flex and flex-col to stack header, main, and footer vertically.
Inside main, use flex to place sidebars and content horizontally.
<div class="flex flex-col min-h-screen"> <header class="bg-blue-200 p-3">Header</header> <main class="flex flex-1"> <aside class="w-1/5 bg-blue-100 p-3">Left Sidebar</aside> <section class="flex-1 bg-white p-3">Main Content</section> <aside class="w-1/5 bg-blue-100 p-3">Right Sidebar</aside> </main> <footer class="bg-blue-200 p-3">Footer</footer> </div>
<div class="flex flex-col min-h-screen"> <header class="bg-green-300 p-5">Header</header> <main class="flex flex-1"> <aside class="w-1/3 bg-green-100 p-5">Left Sidebar</aside> <section class="flex-1 bg-white p-5">Main Content</section> <aside class="w-1/3 bg-green-100 p-5">Right Sidebar</aside> </main> <footer class="bg-green-300 p-5">Footer</footer> </div>
This code creates a full page layout with a header on top, footer at bottom, and three columns in the middle using Tailwind CSS. The center column expands to fill space, sidebars have fixed width.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Holy Grail Layout with Tailwind</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="flex flex-col min-h-screen"> <header class="bg-gray-300 p-4 text-center font-semibold">Header</header> <main class="flex flex-1"> <aside class="w-1/4 bg-gray-200 p-4">Left Sidebar</aside> <section class="flex-1 bg-white p-4">Main Content</section> <aside class="w-1/4 bg-gray-200 p-4">Right Sidebar</aside> </main> <footer class="bg-gray-300 p-4 text-center">Footer</footer> </body> </html>
Use min-h-screen on the container to make the layout fill the full browser height.
Use flex-1 on the main content section to make it grow and fill available space.
Tailwind's utility classes make it easy to adjust widths and spacing quickly.
The Holy Grail layout organizes a page with header, footer, and three columns in the middle.
Use Tailwind's flexbox utilities to create this layout easily and responsively.
The center column grows while sidebars keep fixed widths.
Practice
Solution
Step 1: Understand the layout components
The Holy Grail layout includes a header, footer, and three columns in the middle section.Step 2: Match the description to the layout
To create a page with a header, footer, and three columns in the middle correctly describes this structure, unlike the other options which miss key parts.Final Answer:
To create a page with a header, footer, and three columns in the middle -> Option AQuick Check:
Holy Grail layout = header + footer + 3 columns [OK]
- Confusing it with single column layouts
- Ignoring the footer or header parts
- Thinking it only has two columns
Solution
Step 1: Identify the layout direction
The main content area with three columns needs a horizontal flex container, which isflex flex-row.Step 2: Check other options
grid grid-cols-3uses grid, not flex. Options C and D useflex-colwhich stacks vertically, not horizontally.Final Answer:
flex flex-row -> Option DQuick Check:
Horizontal flex = flex flex-row [OK]
- Using flex-col instead of flex-row
- Confusing grid with flex
- Using block which disables flex behavior
<div class="flex flex-row h-screen"> <aside class="w-48 bg-gray-200">Left</aside> <main class="flex-grow bg-white">Center</main> <aside class="w-48 bg-gray-200">Right</aside> </div>
What will be the width behavior of the center column?
Solution
Step 1: Understand the flex container setup
The container is flex-row with two sidebars fixed at width 48 (w-48).Step 2: Analyze the center column class
The center hasflex-grow, so it expands to fill leftover space between sidebars.Final Answer:
It will grow to fill all space between fixed-width sidebars -> Option AQuick Check:
flex-grow center fills space [OK]
- Assuming center has fixed width
- Thinking center shrinks to zero
- Believing all columns have equal width
<div class="flex flex-col h-screen">
<header class="h-16 bg-blue-500">Header</header>
<div class="flex flex-col flex-grow">
<aside class="w-48 bg-gray-200">Left</aside>
<main class="flex-grow bg-white">Center</main>
<aside class="w-48 bg-gray-200">Right</aside>
</div>
<footer class="h-16 bg-blue-500">Footer</footer>
</div>Why does the layout not show sidebars and center side by side?
Solution
Step 1: Check the inner container flex direction
The inner div usesflex flex-col, stacking children vertically.Step 2: Understand sidebars and center layout
Sidebars and center need to be side by side, soflex-rowis required instead offlex-col.Final Answer:
Because the inner div uses flex-col instead of flex-row for sidebars and center -> Option BQuick Check:
Sidebars side by side need flex-row [OK]
- Ignoring flex direction on inner container
- Blaming header/footer heights
- Thinking fixed widths cause stacking
<div class="flex flex-row h-screen"> <aside class="w-48 bg-gray-200">Left</aside> <main class="flex-grow bg-white">Center</main> <aside class="w-48 bg-gray-200">Right</aside> </div>
Solution
Step 1: Understand responsive flex direction
To stack sidebars vertically on small screens, useflex-colby default and switch toflex-rowon larger screens withsm:flex-row.Step 2: Adjust sidebar sizing
Sidebars need fixed height on small screens instead of fixed width, so changew-48toh-12or similar with responsive utilities.Final Answer:
Add responsive classes: flex-col sm:flex-row on the container and adjust widths to heights for sidebars -> Option CQuick Check:
Responsive flex direction + sizing = collapse sidebars [OK]
- Not using responsive classes
- Hiding sidebars instead of stacking
- Using grid without responsiveness
Ready to prove it?
Pass the test and this pattern moves unknown
