Introduction to CSS :nth-child() Selector

The :nth-child() selector in CSS is used to select elements that are the nth child of their parent. It is a pseudo-class, meaning it is used to define a special state of an element. The :nth-child() selector is particularly useful when you want to apply styles to specific items within a container, like a list or a table, without adding extra classes or ids.

Algogenz logo

10m · 2min read

The :nth-child() selector in CSS is used to select elements that are the nth child of their parent. It is a pseudo-class, meaning it is used to define a special state of an element. The :nth-child() selector is particularly useful when you want to apply styles to specific items within a container, like a list or a table, without adding extra classes or ids.


Basic Example with a List

Let's consider a basic unordered list (<ul>) with several list items (<li>):


<ul class="my-list">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
</ul>

Selecting a Specific Child

To select the second <li> in our list and change its color to red, we use:


.my-list li:nth-child(2) {
  color: red;
}

The second item in the list will now be red.


Odd and Even Children

We can target all odd or even items using the odd and even keywords:


.my-list li:nth-child(odd) {
  background-color: lightgray;
}

This will apply a light gray background to the 1st, 3rd, and 5th items in the list.


Using Formulas

The an+b formula lets us select items based on a repeating pattern:


.my-list li:nth-child(3n+1) {
  font-weight: bold;
}

This formula will bold every third item, starting with the first one (1st, 4th, etc.).


Selecting a Range of Children

To highlight a range of items, say the 2nd to 4th items:


.my-list li:nth-child(n+2):nth-child(-n+4) {
  border: 2px solid blue;
}

Items 2, 3, and 4 will have a blue border.


Selecting the First Few Children

To style only the first three items:


.my-list li:nth-child(-n+3) {
  padding: 10px;
}

The first three items will have extra padding.


Excluding Elements with :nth-of-type()

Consider a mixed list of <span> and <em> elements within a <div>:


<div class="mixed-list">
  <span>Span 1</span>
  <em>Em 1</em>
  <span>Span 2</span>
  <em>Em 2</em>
  <span>Span 3</span>
</div>

To select every second <span>:


.mixed-list span:nth-of-type(2n) {
  color: purple;
}

Every second <span> element will be purple, but <em> elements are not affected.


Understanding the  :nth-child() Selector in Tables

Let's apply :nth-child() to a table with <tr> elements:


<table class="my-table">
  <tr><td>Row 1, Cell 1</td><td>Row 1, Cell 2</td></tr>
  <tr><td>Row 2, Cell 1</td><td>Row 2, Cell 2</td></tr>
  <tr><td>Row 3, Cell 1</td><td>Row 3, Cell 2</td></tr>
</table>

To alternate row colors:


.my-table tr:nth-child(odd) {
  background-color: #e0e0e0;
}
.my-table tr:nth-child(even) {
  background-color: #f5f5f5;
}

Odd rows will have a light gray background, while even rows will be slightly lighter.


Conclusion

The :nth-child() selector is a very versatile pseudo-class that can be used to target elements in a patterned and dynamic fashion. It's especially useful for lists, tables, and any repeating content where you want to apply styles to elements in a specific order. By mastering :nth-child(), you can create more sophisticated and visually appealing designs without cluttering your HTML with extra classes or IDs.

Related Tags

Recommended

Next pages: