Bird
Raised Fist0
CSSmarkup~5 mins

Nth-child selector in CSS

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

The :nth-child() selector helps you pick specific elements based on their order inside a parent. It makes styling easier when you want to target items by their position.

You want to color every 2nd item in a list differently to make it easier to read.
You want to highlight the 3rd paragraph in a section without adding extra classes.
You want to style only the first 5 items in a menu with a special background.
You want to add stripes to table rows for better visibility.
You want to style odd or even items differently in a photo gallery.
Syntax
CSS
:nth-child(an+b) { /* styles */ }

an+b is a formula where a and b are numbers. For example, 2n+1 means every odd child.

You can also use keywords like odd or even instead of the formula.

Examples
This styles only the 3rd list item with red text.
CSS
li:nth-child(3) {
  color: red;
}
This colors every even table row with a light gray background.
CSS
tr:nth-child(even) {
  background-color: #f0f0f0;
}
This makes every odd paragraph bold.
CSS
p:nth-child(2n+1) {
  font-weight: bold;
}
This adds a blue border to the first 4 div elements.
CSS
div:nth-child(-n+4) {
  border: 1px solid blue;
}
Sample Program

This example shows a shopping list where every even item has a light blue background. The 3rd item is styled with red bold text to stand out. This uses :nth-child(even) and :nth-child(3) selectors.

CSS
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Nth-child Selector Example</title>
  <style>
    ul {
      list-style: none;
      padding: 0;
      max-width: 200px;
      margin: 1rem auto;
      font-family: Arial, sans-serif;
    }
    li {
      padding: 0.5rem;
      border: 1px solid #ccc;
      margin-bottom: 0.25rem;
      text-align: center;
    }
    /* Color every even item light blue */
    li:nth-child(even) {
      background-color: #d0e7ff;
    }
    /* Make the 3rd item text red and bold */
    li:nth-child(3) {
      color: #b22222;
      font-weight: bold;
    }
  </style>
</head>
<body>
  <main>
    <h1>Shopping List</h1>
    <ul aria-label="Shopping list">
      <li>Milk</li>
      <li>Bread</li>
      <li>Eggs</li>
      <li>Cheese</li>
      <li>Apples</li>
      <li>Bananas</li>
    </ul>
  </main>
</body>
</html>
OutputSuccess
Important Notes

The :nth-child() selector counts elements of the same parent, regardless of their class or type.

Remember it counts all child elements, so if you want to target only certain types, combine it with the element name, like li:nth-child(2).

Use browser DevTools to inspect and test :nth-child() styles live for better understanding.

Summary

:nth-child() lets you style elements based on their position inside a parent.

You can use formulas or keywords like odd and even to select multiple elements.

This selector helps create patterns like stripes or highlight specific items without extra HTML.

Practice

(1/5)
1. What does the CSS selector li:nth-child(3) select?
easy
A. The third <li> element inside its parent
B. Every third <li> element in the whole document
C. The third child of any type inside the parent
D. All <li> elements except the third one

Solution

  1. Step 1: Understand nth-child selector

    The nth-child(n) selector targets the element that is the nth child of its parent, counting all types of children.
  2. Step 2: Apply to li:nth-child(3)

    This means it selects the li element only if it is the third child of its parent. It does not select the third li if other elements come before it.
  3. Final Answer:

    The third child of any type inside the parent -> Option C
  4. Quick Check:

    li:nth-child(3) = third child of any type [OK]
Hint: Selects element if it is nth child of parent, not nth of type [OK]
Common Mistakes:
  • Thinking it selects the nth element of that type globally
  • Confusing nth-child with nth-of-type selector
  • Assuming it selects every nth element regardless of type
2. Which of the following is the correct syntax to select every even div inside a container using :nth-child?
easy
A. div:nth-child(2n+1)
B. div:nth-child(even)
C. div:nth-child(odd)
D. div:nth-child(2n-1)

Solution

  1. Step 1: Recall even keyword meaning

    The keyword even in :nth-child(even) selects all even-numbered children (2nd, 4th, 6th, etc.).
  2. Step 2: Match syntax to select even div elements

    Using div:nth-child(even) selects every div that is an even child of its parent.
  3. Final Answer:

    div:nth-child(even) -> Option B
  4. Quick Check:

    even = every 2nd child [OK]
Hint: Use 'even' keyword to select every 2nd child easily [OK]
Common Mistakes:
  • Using odd instead of even
  • Using formulas like 2n+1 which select odd children
  • Confusing nth-child with nth-of-type
3. Given this HTML:
<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
</ul>

And CSS:
li:nth-child(2n) { color: red; }

Which list items will appear red in the browser?
medium
A. Only Two
B. One, Three, and Five
C. All list items
D. Two and Four

Solution

  1. Step 1: Understand 2n in nth-child

    The formula 2n selects every even child: 2nd, 4th, 6th, etc.
  2. Step 2: Apply to the list items

    Items 2 (Two) and 4 (Four) are even children, so they get the red color.
  3. Final Answer:

    Two and Four -> Option D
  4. Quick Check:

    2n = even children = Two, Four [OK]
Hint: 2n selects even children: 2,4,6... [OK]
Common Mistakes:
  • Thinking 2n selects odd children
  • Confusing nth-child with nth-of-type
  • Assuming all items get styled
4. What is wrong with this CSS if the goal is to color every 3rd p element blue?
p:nth-child(3n+1) {
  color: blue;
}
medium
A. It colors the 1st, 4th, 7th p, not every 3rd
B. Syntax error in the formula
C. It colors only the 3rd p element
D. It colors all p elements

Solution

  1. Step 1: Analyze the formula 3n+1

    The formula 3n+1 selects children at positions 1, 4, 7, 10, ...
  2. Step 2: Compare with the goal of every 3rd element

    Every 3rd element means positions 3, 6, 9, ... which is 3n, not 3n+1.
  3. Final Answer:

    It colors the 1st, 4th, 7th <p>, not every 3rd -> Option A
  4. Quick Check:

    3n+1 = 1,4,7... not every 3rd [OK]
Hint: Use 3n for every 3rd, not 3n+1 [OK]
Common Mistakes:
  • Using 3n+1 instead of 3n for every 3rd child
  • Confusing formula offsets
  • Expecting 3n+1 to select 3rd, 6th, 9th
5. You want to style only the 2nd and 4th li elements inside a ul without styling the 6th or others. Which CSS selector achieves this?
hard
A. li:nth-child(2), li:nth-child(4)
B. li:nth-child(2n)
C. li:nth-child(2n+2)
D. li:nth-child(2n):not(:nth-child(6))

Solution

  1. Step 1: Understand the goal

    We want to style only the 2nd and 4th li elements, excluding the 6th or any others.
  2. Step 2: Evaluate each option

    li:nth-child(2n):not(:nth-child(6)) selects every even li except the 6th, but also includes 8th, 10th, etc. li:nth-child(2n) selects all even li elements (2nd, 4th, 6th, ...). li:nth-child(2n+2) selects 2nd, 4th, 6th, ... as well. li:nth-child(2), li:nth-child(4) explicitly selects only the 2nd and 4th li elements.
  3. Final Answer:

    li:nth-child(2), li:nth-child(4) -> Option A
  4. Quick Check:

    Explicitly list 2nd and 4th for exact selection [OK]
Hint: List exact children with commas for precise selection [OK]
Common Mistakes:
  • Using formulas that select more than needed
  • Trying to exclude with :not() but missing others
  • Assuming 2n+2 excludes 6th child