Odd and even row styling helps make tables easier to read by coloring rows differently. It separates information visually like stripes on a zebra.
Odd and even row styling in Tailwind
class="odd:bg-color even:bg-color"Use odd: to style odd-numbered rows and even: for even-numbered rows.
These classes work on elements containing the rows, such as <tbody> or <ul>, not directly on the rows themselves.
<tbody class="odd:bg-gray-100 even:bg-white">...</tbody><ul class="odd:text-blue-600 even:text-red-600"><li>Item</li></ul><div class="odd:bg-green-50 even:bg-green-100"><div>Row</div></div>This example shows a simple user table. Odd rows have a light gray background, and even rows are white. This makes it easier to follow each row across the table.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Odd and Even Row Styling</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="p-6"> <main> <h1 class="text-2xl font-bold mb-4">User List with Odd and Even Row Colors</h1> <table class="w-full border-collapse"> <thead> <tr class="bg-gray-300"> <th class="border p-2 text-left">Name</th> <th class="border p-2 text-left">Email</th> <th class="border p-2 text-left">Role</th> </tr> </thead> <tbody class="odd:bg-gray-100 even:bg-white"> <tr> <td class="border p-2">Alice</td> <td class="border p-2">alice@example.com</td> <td class="border p-2">Admin</td> </tr> <tr> <td class="border p-2">Bob</td> <td class="border p-2">bob@example.com</td> <td class="border p-2">User</td> </tr> <tr> <td class="border p-2">Carol</td> <td class="border p-2">carol@example.com</td> <td class="border p-2">Editor</td> </tr> <tr> <td class="border p-2">Dave</td> <td class="border p-2">dave@example.com</td> <td class="border p-2">User</td> </tr> </tbody> </table> </main> </body> </html>
Make sure your parent container (like <tbody>) wraps the rows for odd/even styling to work.
You can combine odd/even with other Tailwind utilities for text, borders, or spacing.
Test your colors for good contrast to keep your table accessible.
Odd and even row styling helps separate rows visually for easier reading.
Use odd: and even: prefixes in Tailwind to style rows differently.
This technique works well for tables, lists, and repeated content blocks.
Practice
odd: prefix do in Tailwind CSS when applied to a list of rows?Solution
Step 1: Understand the
Theodd:prefix meaningodd:prefix targets elements in odd positions (1st, 3rd, 5th, etc.) in a list or table.Step 2: Apply to rows
When used on rows, it applies styles only to those odd-numbered rows, leaving even rows unaffected.Final Answer:
It styles only the rows with odd numbers differently. -> Option DQuick Check:
odd:= odd rows styled [OK]
- Confusing odd with even rows
- Thinking it styles all rows
- Assuming it removes styles
Solution
Step 1: Identify the correct prefix for even rows
The prefix for styling even rows in Tailwind iseven:.Step 2: Combine prefix with background color
To style even rows with a gray background, useeven:bg-gray-200.Final Answer:
even:bg-gray-200-> Option AQuick Check:
Prefixeven:+ class =even:bg-gray-200[OK]
even: before class for even rows [OK]- Using
odd:instead ofeven: - Placing prefix after class
- Using invalid class names
<ul> <li class="odd:bg-blue-100 even:bg-green-100">Item 1</li> <li class="odd:bg-blue-100 even:bg-green-100">Item 2</li> <li class="odd:bg-blue-100 even:bg-green-100">Item 3</li> <li class="odd:bg-blue-100 even:bg-green-100">Item 4</li> </ul>
What background colors will the items have?
Solution
Step 1: Understand odd and even row styling
Items in odd positions (1, 3) getbg-blue-100, even positions (2, 4) getbg-green-100.Step 2: Match items to colors
Item 1 and 3 have blue background; Item 2 and 4 have green background.Final Answer:
Items 1 and 3 have blue; Items 2 and 4 have green. -> Option BQuick Check:
odd = blue, even = green [OK]
- Swapping odd and even colors
- Assuming all items have same color
- Ignoring the prefixes
<tr class="odd:bg-gray-100 even:bg-white">...</tr>
But the even rows are not white, they remain gray. What is the likely problem?
Solution
Step 1: Check odd/even styling context
Odd and even styling depends on the element's position among siblings inside a parent container like<tbody>.Step 2: Identify missing parent container
If<tr>elements are not inside<tbody>or<table>, the browser may not count rows correctly, so even rows don't get styled.Final Answer:
The parent<tbody>or<table>is missing, so odd/even can't apply. -> Option CQuick Check:
Odd/even needs proper parent container [OK]
<tbody> for odd/even to work [OK]- Thinking
even:doesn't work on<tr> - Forgetting to wrap rows in
<tbody> - Using wrong class order
Solution
Step 1: Understand Tailwind limitations
Pure Tailwindodd:andeven:prefixes cannot condition styles on text content length, as CSS lacks selectors for character count.Step 2: Best hybrid approach
Applyodd:bg-blue-100 even:bg-green-100classes to rows and use JavaScript to detect text length >10 characters, then add a modifier class (e.g.,long-text). Combine with custom variants likelong-text:odd:bg-blue-100via Tailwind config or arbitrary variants for conditional application.Final Answer:
Useodd:bg-blue-100 even:bg-green-100and add JavaScript to add a class for long text rows. -> Option AQuick Check:
Tailwind classes + JS for content length [OK]
- Expecting pure CSS
:has()to handle text length - Using inline styles instead of Tailwind classes
- Ignoring the need for JS in content-based conditions
Ready to prove it?
Pass the test and this pattern moves unknown
