Discover how to make your lists style themselves perfectly without extra work!
Why First-child and last-child targeting in Tailwind? - Purpose & Use Cases
Imagine you have a list of items on a webpage, and you want to style only the first and last items differently, like making the first item bold and the last item italic.
If you try to do this by adding special classes manually to the first and last items, it becomes a hassle when the list changes. You have to remember to update those classes every time you add or remove items, which is slow and error-prone.
Using first-child and last-child selectors in Tailwind CSS lets you automatically style the first and last items without extra classes. This means your styles adjust automatically as the list changes.
<li class="font-bold">Item 1</li> <li>Item 2</li> <li class="italic">Item 3</li>
<li class="first:font-bold last:italic">Item 1</li> <li class="first:font-bold last:italic">Item 2</li> <li class="first:font-bold last:italic">Item 3</li>
You can create flexible, dynamic lists that style themselves correctly no matter how items are added or removed.
Think of a navigation menu where the first link needs a special highlight and the last link a different color. Using these selectors means you never have to update classes when menu items change.
Manually styling first and last items is slow and error-prone.
first-child and last-child selectors automate this styling.
Tailwind makes it easy with simple utility classes that adapt as content changes.
Practice
first:bg-blue-500 do in a list of items?Solution
Step 1: Understand the
Thefirst:prefixfirst:prefix in Tailwind targets only the first child element in a group.Step 2: Apply the background color
The classbg-blue-500sets the background color to blue. Combined withfirst:, only the first item gets this color.Final Answer:
It changes the background color of the first item to blue. -> Option AQuick Check:
first:bg-blue-500targets first child [OK]
- Thinking it styles all items
- Confusing first-child with last-child
- Assuming it removes styles instead of adding
Solution
Step 1: Recall Tailwind pseudo-class syntax
Tailwind usesfirst:andlast:prefixes without hyphens or camel case.Step 2: Identify the correct prefix for last child
The correct prefix islast:, solast:text-red-500applies red text to the last child.Final Answer:
last:text-red-500 -> Option DQuick Check:
Uselast:prefix for last child [OK]
last:, no hyphens or camelCase [OK]- Using CSS syntax like last-child:
- Writing camelCase or lowercase without colon
- Adding extra hyphens or misspelling
<ul> <li class="first:text-green-600 last:text-red-600">Apple</li> <li class="first:text-green-600 last:text-red-600">Banana</li> <li class="first:text-green-600 last:text-red-600">Cherry</li> </ul>
What color will the text of each list item be?
Solution
Step 1: Understand the classes on each <li>
Each <li> hasfirst:text-green-600andlast:text-red-600. These apply green text to the first child and red text to the last child only.Step 2: Apply styles to list items
Apple is the first <li>, so it gets green text. Cherry is the last <li>, so it gets red text. Banana is in the middle, so it keeps default text color.Final Answer:
Apple is green, Banana is default, Cherry is red -> Option BQuick Check:
first: green, last: red, others default [OK]
- Assuming all items get styled
- Mixing up first and last child colors
- Thinking middle items get styles too
<section> differently using Tailwind. You wrote:<section> <p class="first:text-blue-700 last:text-red-700">Intro</p> <p class="first:text-blue-700 last:text-red-700">Content</p> <p class="first:text-blue-700 last:text-red-700">Summary</p> </section>
In practice, the first paragraph gets blue text, the last gets red text, and the middle stays default. What best explains this behavior?
Solution
Step 1: Understand how
When bothfirst:andlast:work on the same elementfirst:andlast:are on the same element, only one can apply because an element cannot be both first and last child simultaneously.Step 2: Analyze the HTML structure
Each paragraph has both classes. Intro is first child, sofirst:text-blue-700applies butlast:text-red-700does not. Summary is last child, solast:text-red-700applies butfirst:does not. Content matches neither.Final Answer:
Thefirst:andlast:classes are on the same element but only one applies per element. -> Option AQuick Check:
One element can't be both first and last child [OK]
- Thinking classes must be on parent
- Believing all siblings must share classes
- Expecting both styles on same element
<nav>. You want the first link to have a green border, the last link to have a red border, and all others to have a gray border. Which Tailwind classes and structure will achieve this best?Solution
Step 1: Understand how to apply default and conditional styles
All links should have a gray border by default. The first and last links get additional border colors usingfirst:andlast:prefixes.Step 2: Check class placement and repetition
Applyborder-gray-300to all links. Addfirst:border-green-500 last:border-red-500to all links too. First link matchesfirst:(green override), last matcheslast:(red override), others match neither (gray).<br><pre><nav> <a class="first:border-green-500 last:border-red-500 border-gray-300">Home</a> <a class="first:border-green-500 last:border-red-500 border-gray-300">About</a> <a class="first:border-green-500 last:border-red-500 border-gray-300">Services</a> <a class="first:border-green-500 last:border-red-500 border-gray-300">Blog</a> <a class="first:border-green-500 last:border-red-500 border-gray-300">Contact</a> </nav>Final Answer:
Option C correctly applies default and conditional borders. -> Option CQuick Check:
Default border on all, first and last get overrides [OK]
- Adding first/last classes to all links
- Putting first/last classes on wrong elements
- Not applying default styles to all links
Ready to prove it?
Pass the test and this pattern moves unknown
