A masonry-style grid arranges items in columns with varying heights, like bricks in a wall. It helps show content neatly without big gaps.
Masonry-style grid in Tailwind
Use Tailwind CSS classes to create columns and gaps: <div class="columns-3 gap-4"> <div class="mb-4">Item 1</div> <div class="mb-4">Item 2</div> <div class="mb-4">Item 3</div> <!-- more items --> </div>
columns-3 creates 3 columns for the masonry effect.
gap-4 adds space between columns and items.
<div class="columns-2 gap-3"> <div class="mb-3">Short item</div> <div class="mb-3">A taller item with more content</div> <div class="mb-3">Another item</div> </div>
<div class="columns-4 gap-6"> <div class="mb-6">Item 1</div> <div class="mb-6">Item 2</div> <div class="mb-6">Item 3</div> <div class="mb-6">Item 4</div> </div>
This example creates a 3-column masonry grid using Tailwind's columns-3 and gap-4 classes. Each item has different content length to show how the grid stacks them neatly.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Masonry Grid Example</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="bg-gray-50 p-6"> <main class="max-w-4xl mx-auto"> <h1 class="text-2xl font-bold mb-6">Masonry-style Grid with Tailwind</h1> <section class="columns-3 gap-4"> <article class="mb-4 bg-white p-4 rounded shadow"> <h2 class="font-semibold mb-2">Item One</h2> <p>This is a short description.</p> </article> <article class="mb-4 bg-white p-4 rounded shadow"> <h2 class="font-semibold mb-2">Item Two</h2> <p>This item has a longer description to show how the masonry grid stacks items with different heights nicely.</p> </article> <article class="mb-4 bg-white p-4 rounded shadow"> <h2 class="font-semibold mb-2">Item Three</h2> <p>Medium length content here.</p> </article> <article class="mb-4 bg-white p-4 rounded shadow"> <h2 class="font-semibold mb-2">Item Four</h2> <p>Short content.</p> </article> <article class="mb-4 bg-white p-4 rounded shadow"> <h2 class="font-semibold mb-2">Item Five</h2> <p>This is another longer item to demonstrate the masonry effect with varied heights.</p> </article> </section> </main> </body> </html>
The masonry effect uses CSS columns, so items flow vertically in each column.
Use mb-4 or similar margin-bottom classes on items to add vertical spacing.
For accessibility, use semantic elements like <article> and headings inside items.
Masonry grids arrange items in columns with different heights, like bricks.
Tailwind's columns-{n} and gap-{size} classes create this layout easily.
Use semantic HTML and spacing classes for a neat, accessible design.
Practice
columns-3 do in a masonry-style grid layout?Solution
Step 1: Understand the
This class divides the container into 3 vertical columns, allowing items to flow vertically like bricks in a wall.columns-3classStep 2: Differentiate from rows and spacing
It does not create rows or set spacing or font size; those are controlled by other classes likegap-ortext-.Final Answer:
It splits the container into 3 vertical columns for items to flow into. -> Option DQuick Check:
columns-3means 3 vertical columns [OK]
- Confusing columns with rows
- Thinking it sets spacing or font size
- Assuming it creates fixed-height rows
Solution
Step 1: Identify gap class usage
Thegap-4class adds consistent horizontal and vertical spacing between grid items.Step 2: Differentiate from other spacing classes
space-x-4adds only horizontal spacing between flex items,m-4adds margin around an element, andcolumns-4sets column count, not spacing.Final Answer:
gap-4 -> Option CQuick Check:
Usegap-4for spacing in grids [OK]
- Using space-x-4 which only adds horizontal space
- Confusing margin (m-4) with gap
- Using columns-4 to add space instead of columns
<div class="columns-2 gap-3"> <div class="bg-blue-300 p-4">Item 1</div> <div class="bg-green-300 p-4">Item 2</div> <div class="bg-red-300 p-4">Item 3</div> <div class="bg-yellow-300 p-4">Item 4</div> </div>
How will the items be arranged visually?
Solution
Step 1: Understand columns-2 effect
The container is split into 2 vertical columns. Items flow vertically in each column, filling the first column top to bottom, then the second.Step 2: Analyze gap and item styling
Thegap-3adds spacing between columns and rows. Each item has padding and background color but no fixed height, so heights can vary.Final Answer:
Two vertical columns with items flowing top to bottom in each column. -> Option BQuick Check:
columns-2means 2 vertical columns [OK]
- Thinking columns create rows
- Assuming equal height rows automatically
- Ignoring vertical flow in columns
<div class="columns-3 gap-4"> <div class="p-4">Item A</div> <div class="p-4">Item B</div> <div class="p-4">Item C</div> </div>
But the items appear stacked in one column instead of three. What is the likely cause?
Solution
Step 1: Check container sizing
Without a set width or max-width, the container may shrink to fit content, causing columns to collapse into one.Step 2: Verify other classes
gap-4is valid, andcolumns-3works for masonry. Flex is not needed here because columns use CSS multi-column layout.Final Answer:
The container div is missing a width or max-width, so columns collapse. -> Option AQuick Check:
Container width needed for columns to show [OK]
- Assuming gap-4 breaks layout
- Adding flex unnecessarily
- Thinking Tailwind lacks columns support
Solution
Step 1: Understand responsive columns classes
Usingcolumns-1 md:columns-2 lg:columns-4sets the number of columns based on screen size: 1 for small, 2 for medium, 4 for large.Step 2: Confirm gap usage
gap-6adds consistent spacing between items across all screen sizes.Step 3: Differentiate from grid and flex
Grid and flex layouts are different from masonry columns. grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 uses grid, which is not masonry style. flex flex-wrap gap-6 columns-4 mixes flex and columns incorrectly. columns-4 md:columns-2 lg:columns-1 gap-6 reverses column counts.Final Answer:
columns-1 md:columns-2 lg:columns-4 gap-6 -> Option AQuick Check:
Responsive columns use breakpoint prefixes [OK]
- Using grid instead of columns for masonry
- Mixing flex with columns incorrectly
- Reversing responsive column counts
Ready to prove it?
Pass the test and this pattern moves unknown
