Tailwind Responsive Layout Patterns
Layout patterns are proven ways to arrange content on a page. Tailwind makes these patterns easy to build using simple utility classes. This topic covers the most common responsive layouts you will use in real projects.
Pattern 1: Stack to Side-by-Side
This is the most common pattern. On mobile, items stack vertically. On desktop, they sit side by side.
Use Case: Article with Sidebar
<div class="flex flex-col lg:flex-row gap-6">
<main class="lg:w-2/3">
<h1>Main Article Content</h1>
<p>Article text goes here...</p>
</main>
<aside class="lg:w-1/3">
<h2>Related Links</h2>
</aside>
</div>Mobile: Desktop: ┌─────────────────┐ ┌──────────────┬──────────┐ │ Main Article │ │ │ │ │ (full width) │ │ Main │ Sidebar │ ├─────────────────┤ │ Article │ (1/3) │ │ Sidebar │ │ (2/3) │ │ │ (full width) │ │ │ │ └─────────────────┘ └──────────────┴──────────┘
Pattern 2: Responsive Grid Card Layout
Cards are small boxes showing products, blog posts, or team members. This grid grows from 1 column to 4 columns as the screen gets wider.
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
<div class="bg-white rounded shadow p-4">Card 1</div>
<div class="bg-white rounded shadow p-4">Card 2</div>
<div class="bg-white rounded shadow p-4">Card 3</div>
<div class="bg-white rounded shadow p-4">Card 4</div>
</div>Mobile (1 col): Tablet (2 col): Desktop (4 col): ┌──────────┐ ┌────┬────┐ ┌──┬──┬──┬──┐ │ Card 1 │ │ C1 │ C2 │ │C1│C2│C3│C4│ ├──────────┤ ├────┼────┤ └──┴──┴──┴──┘ │ Card 2 │ │ C3 │ C4 │ ├──────────┤ └────┴────┘ │ Card 3 │ ├──────────┤ │ Card 4 │ └──────────┘
Pattern 3: Holy Grail Layout
The "Holy Grail" layout has a header at top, footer at bottom, a main content area, and two sidebars in the middle.
<div class="min-h-screen flex flex-col">
<header class="bg-blue-600 text-white p-4">Header</header>
<div class="flex flex-col lg:flex-row flex-1 gap-4 p-4">
<nav class="lg:w-48 bg-gray-100 p-3 rounded">Left Nav</nav>
<main class="flex-1 bg-white p-4 rounded shadow">Main Content</main>
<aside class="lg:w-48 bg-gray-100 p-3 rounded">Right Aside</aside>
</div>
<footer class="bg-gray-800 text-white p-4">Footer</footer>
</div>Desktop Layout: ┌─────────────────────────────────────────┐ │ HEADER │ ├──────────┬──────────────────┬───────────┤ │ │ │ │ │ Left Nav │ Main Content │ Aside │ │ │ │ │ ├──────────┴──────────────────┴───────────┤ │ FOOTER │ └─────────────────────────────────────────┘
Pattern 4: Centered Content with Max Width
This keeps your content readable on very wide monitors by limiting its maximum width and centering it.
<div class="max-w-4xl mx-auto px-4">
<h1>Centered Article</h1>
<p>This content will never stretch beyond 896px wide.</p>
</div>
Wide Screen:
┌──────────────────────────────────────────────────────┐
│ │◄─────────── max-w-4xl (896px) ───────────►│ │
│ │ Centered Content Here │ │
│ │ │ │
└──────────────────────────────────────────────────────┘
▲ ▲
mx-auto margin mx-auto margin
Common max-width values:
| Class | Max Width | Best For |
|---|---|---|
max-w-sm | 384px | Login forms |
max-w-2xl | 672px | Blog articles |
max-w-4xl | 896px | Portfolio pages |
max-w-7xl | 1280px | Full app layouts |
Pattern 5: Full-Screen Hero Section
A hero section fills the entire screen height and centers its content.
<section class="min-h-screen flex items-center justify-center bg-gradient-to-r from-blue-500 to-purple-600">
<div class="text-center text-white px-4">
<h1 class="text-4xl md:text-6xl font-bold">Welcome</h1>
<p class="mt-4 text-lg md:text-xl">Build beautiful things with Tailwind</p>
<button class="mt-8 bg-white text-blue-600 px-8 py-3 rounded-full font-bold">
Get Started
</button>
</div>
</section>┌────────────────────────────────────┐ ← 100vh height │ │ │ │ │ ↕ items-center │ │ ┌──────────────────┐ │ │ │ Welcome │ ← centered text │ │ Build with TW │ | │ │ [Get Started] │ | │ └──────────────────┘ | │ │ │ │ └────────────────────────────────────┘
Pattern 6: Fixed Header with Scrollable Content
The navigation stays at the top while the page content scrolls underneath it.
<div class="flex flex-col min-h-screen">
<!-- Sticky header -->
<header class="sticky top-0 z-50 bg-white shadow-md p-4">
<nav>My Website</nav>
</header>
<!-- Scrollable main content -->
<main class="flex-1 p-6">
<p>Long page content here...</p>
</main>
</div>┌──────────────────────────────┐ ← fixed at top │ sticky top-0 HEADER/NAV │ ├──────────────────────────────┤ │ Section 1 content │ ↕ scrolls │ Section 2 content │ │ Section 3 content │ │ Section 4 content │ └──────────────────────────────┘
Pattern 7: Two-Column Form Layout
Forms on mobile stack all fields. On desktop, fields appear in two columns.
<form class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium">First Name</label>
<input class="mt-1 w-full border rounded p-2" type="text">
</div>
<div>
<label class="block text-sm font-medium">Last Name</label>
<input class="mt-1 w-full border rounded p-2" type="text">
</div>
<!-- Full-width field -->
<div class="md:col-span-2">
<label class="block text-sm font-medium">Email</label>
<input class="mt-1 w-full border rounded p-2" type="email">
</div>
</form>Mobile: Desktop: ┌───────────────┐ ┌──────────────┬──────────────┐ │ First Name │ │ First Name │ Last Name │ ├───────────────┤ ├──────────────┴──────────────┤ │ Last Name │ │ Email │ ├───────────────┤ └─────────────────────────────┘ │ Email │ └───────────────┘
Pattern 8: Masonry-Style Image Gallery
Show images in a Pinterest-style layout using Tailwind's column utilities.
<div class="columns-1 sm:columns-2 lg:columns-3 gap-4">
<img src="img1.jpg" class="mb-4 w-full rounded">
<img src="img2.jpg" class="mb-4 w-full rounded">
<img src="img3.jpg" class="mb-4 w-full rounded">
<img src="img4.jpg" class="mb-4 w-full rounded">
<img src="img5.jpg" class="mb-4 w-full rounded">
</div>Desktop (3 columns): ┌────────┐ ┌────────┐ ┌────────┐ │ Img 1 │ │ Img 2 │ │ Img 3 │ │ tall │ │ short │ │ medium │ │ │ ├────────┤ │ │ │ │ │ Img 4 │ ├────────┤ ├────────┤ │ tall │ │ Img 5 │ │ Img 6 │ │ │ │ short │ └────────┘ └────────┘ └────────┘
Pattern 9: Responsive Navigation Pattern
Show a hamburger menu on mobile and a full horizontal nav on desktop.
<header class="bg-white shadow p-4 flex justify-between items-center">
<div class="font-bold text-xl">Logo</div>
<!-- Desktop Nav -->
<nav class="hidden md:flex gap-6 text-gray-700">
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Contact</a>
</nav>
<!-- Mobile Hamburger -->
<button class="md:hidden text-2xl">☰</button>
</header>Mobile: Desktop: ┌────────────────────┐ ┌─────────────────────────────────┐ │ Logo ☰ │ │ Logo Home About Contact │ └────────────────────┘ └─────────────────────────────────┘
Combining Patterns: Real-World Landing Page Structure
<body class="font-sans">
<!-- Fixed Nav -->
<header class="sticky top-0 z-50 bg-white shadow">...</header>
<!-- Hero -->
<section class="min-h-screen flex items-center justify-center">...</section>
<!-- Feature Cards -->
<section class="max-w-7xl mx-auto px-4 py-16">
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">...</div>
</section>
<!-- Two-column content -->
<section class="max-w-6xl mx-auto px-4 flex flex-col lg:flex-row gap-8">...</section>
<!-- Footer -->
<footer class="bg-gray-900 text-white py-12">...</footer>
</body>Layout Pattern Decision Guide
| Situation | Pattern to Use |
|---|---|
| Blog post with sidebar | Stack to Side-by-Side (flex) |
| Product listing page | Responsive Grid Cards |
| Dashboard | Holy Grail Layout |
| Article page | Centered with max-width |
| Landing page top section | Full-Screen Hero |
| Sign-up form | Two-Column Form |
| Photo portfolio | Masonry Gallery |
Summary
- Responsive layouts in Tailwind combine
flex,grid, and breakpoint prefixes - Start mobile-first, then add breakpoint prefixes to widen the layout
- Use
max-w-*withmx-autoto center and constrain wide content - Use
sticky top-0for headers that stay visible while scrolling - Use
hidden md:blockandblock md:hiddento switch between mobile and desktop UI elements
