CSS :nth-child() Pseudo-class: A Complete Guide to Selecting Every Nth Element

Nov 23, 2025 · Programming · 22 views · 7.8

Keywords: CSS Selectors | :nth-child() | Pseudo-class Selector | Element Selection | Arithmetic Expressions

Abstract: This article provides an in-depth exploration of the CSS :nth-child() pseudo-class selector, focusing on how to select every Nth element using arithmetic expressions. It compares different expressions like 4n and 4n+4, discusses the differences between :nth-child() and :nth-of-type(), and demonstrates practical applications through comprehensive code examples.

Introduction

In CSS development, there is often a need to select elements at specific positions for styling purposes. Traditional approaches require specifying each element position individually, such as div:nth-child(4), div:nth-child(8), etc. This method becomes cumbersome and difficult to maintain when dealing with large numbers of elements. CSS provides the powerful :nth-child() pseudo-class selector, which elegantly solves this problem through arithmetic expressions.

Basic Syntax of :nth-child()

The :nth-child() pseudo-class selector matches elements based on their index position within their parent element. Its basic syntax is:

element:nth-child(An+B) {
    /* style rules */
}

Where:

Selecting Every Nth Element

To select every fourth <div> element, you can use the div:nth-child(4n) expression. This expression works as follows:

4(0) = 0
4(1) = 4
4(2) = 8
4(3) = 12
4(4) = 16
...

Since element indices start at 1 while n starts at 0, the first matching element is at index 4, followed by 8, 12, 16, and so on.

Comparison of Different Expressions

In practical usage, 4n and 4n+4 will produce the same results in most cases:

/* 4n expression */
4(0) = 0
4(1) = 4
4(2) = 8
4(3) = 12
4(4) = 16

/* 4n+4 expression */
4(0) + 4 = 4
4(1) + 4 = 8
4(2) + 4 = 12
4(3) + 4 = 16
4(4) + 4 = 20

As shown, both expressions select elements at positions 4, 8, 12, and 16. The only difference is that 4n+4 starts from index 4, while 4n theoretically starts from index 0, but since index 0 doesn't exist, the practical effect is identical.

Differences Between :nth-child() and :nth-of-type()

When a parent element contains children of different types, :nth-child() and :nth-of-type() exhibit different selection behaviors.

Consider the following HTML structure:

<body>
    <h1></h1>
    <div>1</div>  <div>2</div>
    <div>3</div>  <div>4</div>
    <h2></h2>
    <div>5</div>  <div>6</div>
    <div>7</div>  <div>8</div>
    <h2></h2>
    <div>9</div>  <div>10</div>
    <div>11</div> <div>12</div>
    <h2></h2>
    <div>13</div> <div>14</div>
    <div>15</div> <div>16</div>
</body>

When using div:nth-child(4n), the selector will:

When using div:nth-of-type(4n), the selector will:

Advanced Application Scenarios

Selecting Odd or Even Elements

Keywords can simplify common selection patterns:

/* Select odd-positioned elements */
tr:nth-child(odd) {
    background-color: #f5f5f5;
}

/* Select even-positioned elements */
tr:nth-child(even) {
    background-color: #ffffff;
}

Selecting Specific Element Ranges

Combining expressions allows selection of specific element ranges:

/* Select elements 8 through 15 */
p:nth-child(n+8):nth-child(-n+15) {
    color: blue;
}

Handling Hidden Elements

When hidden elements are present in the page, the of syntax provides precise control:

/* Traditional approach - may be affected by hidden elements */
tr:nth-child(even) {
    background-color: silver;
}

/* Using of syntax to exclude hidden elements */
tr:nth-child(even of :not([hidden])) {
    background-color: silver;
}

Practical Development Recommendations

Performance Considerations

While :nth-child() selectors perform well in modern browsers, consider the following when dealing with large numbers of elements:

Browser Compatibility

The :nth-child() selector enjoys broad support across modern browsers:

Conclusion

The :nth-child() pseudo-class selector is a powerful tool in CSS that significantly simplifies position-based element selection. By understanding how arithmetic expressions work and the subtle differences between variants, developers can write more concise and maintainable CSS code. In practical projects, judicious use of :nth-child() can greatly enhance development efficiency and code quality.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.