Est-il possible de sélectionner, par exemple, chaque quatrième élément d'un ensemble d'éléments?
Ex: j'ai 16 <div>
éléments ... Je pourrais écrire quelque chose comme.
div:nth-child(4),
div:nth-child(8),
div:nth-child(12),
div:nth-child(16)
y a-t-il une meilleure manière de faire cela?
Comme son nom l'indique, :nth-child()
vous permet de construire une expression arithmétique à l'aide de la variable n
en plus des nombres constants. Vous pouvez effectuer des additions (+
), des soustractions (-
) et multiplication de coefficients (an
où a
est un entier, y compris des nombres positifs, nombres négatifs et zéro).
Voici comment réécrire la liste de sélecteurs ci-dessus:
div:nth-child(4n)
Pour une explication sur le fonctionnement de ces expressions arithmétiques, voir ma réponse à cette question , ainsi que le spec .
Notez que cette réponse suppose que tous les éléments enfants d'un même élément parent sont du même type d'élément, div
. Si vous avez d'autres éléments de types différents tels que h1
ou p
, vous devrez utiliser :nth-of-type()
à la place de :nth-child()
pour vous assurer de ne compter que les éléments div
:
<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>
Pour tout le reste (classes, attributs ou toute combinaison de ceux-ci), où vous recherchez le nième enfant qui correspond à un sélecteur arbitraire, vous ne pourrez pas le faire avec un sélecteur CSS pur. Voir ma réponse à cette question .
À propos, il n'y a pas beaucoup de différence entre 4n et 4n + 4 en ce qui concerne :nth-child()
. Si vous utilisez la variable n
, elle commence à compter à 0. Voici à quoi correspond chaque sélecteur:
:nth-child(4n)
4(0) = 0
4(1) = 4
4(2) = 8
4(3) = 12
4(4) = 16
...
:nth-child(4n+4)
4(0) + 4 = 0 + 4 = 4
4(1) + 4 = 4 + 4 = 8
4(2) + 4 = 8 + 4 = 12
4(3) + 4 = 12 + 4 = 16
4(4) + 4 = 16 + 4 = 20
...
Comme vous pouvez le constater, les deux sélecteurs correspondent aux mêmes éléments que ci-dessus. Dans ce cas, il n'y a pas de différence.
div:nth-child(4n+4)
Essayez ceci
div:nth-child(4n+4)
Vous avez besoin du bon argument pour la pseudo-classe nth-child
.
L’argument doit être de la forme _an + b
_ pour correspondre à tous lesth enfant à partir de b.
a
et b
sont des nombres entiers facultatifs et peuvent être nuls ou négatifs.
a
est égal à zéro, il n'y a pas "tous lesth child " clause.a
est négatif, la correspondance est effectuée à partir de b
.b
est égal à zéro ou négatif, il est possible d'écrire une expression équivalente en utilisant positif b
par ex. _4n+0
_ est identique à _4n+4
_. De même, _4n-1
_ est identique à _4n+3
_.Exemples:
_li:nth-child(4n) {
background: yellow;
}
_
_<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>
_
_li:nth-child(4n+1) {
background: yellow;
}
_
_<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>
_
_/* two selectors are required */
li:nth-child(4n+3),
li:nth-child(4n+4) {
background: yellow;
}
_
_<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>
_
_/* when a is negative then matching is done backwards */
li:nth-child(-n+4) {
background: yellow;
}
_
_<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>
_