Pourquoi: nth-child () répète-t-il un au lieu de zéro?
Comme indiqué dans ce exemple . Pourquoi sélectionne-t-il le premier élément et non le second quand
p :nth-child(1)
Si vous comptez vos propres enfants, vous diriez "mon premier enfant", "mon deuxième enfant" et ainsi de suite, pas "mon enfant zéro". C'est simplement ainsi que les humains comptent. (Remarque: ce n'est pas une opinion subjective de ma part. C'est littéralement comment nombres ordinaux fonctionne.)
La raison pour laquelle vous posez même la question est probablement parce que vous êtes un programmeur, et de nombreux langages de programmation indexent les éléments de tableau et de liste à partir de 0. La raison en est que dans les langages de bas niveau comme C, un tableau est vraiment un pointeur vers l'adresse mémoire du premier élément et l'index est un décalage par rapport à ce pointeur. Donc array[0]
signifie l'adresse du premier élément, array[1]
signifie l'adresse du premier élément plus la taille de 1 élément, c'est-à-dire le deuxième élément, etc.
De nombreux langages de niveau supérieur qui ne prennent pas directement en charge l'arithmétique des pointeurs ont conservé l'indexation basée sur 0 pour des raisons de cohérence et de familiarité. Par exemple, tous les langages avec une syntaxe dérivée de C - y compris JavaScript, même si les tableaux en JavaScript sont implémentés d'une manière complètement différente. Mais ce n'est pas du tout universel - des langages comme COBOL, Fortran, Lua et certains Basic utilisent l'indexation basée sur 1. (Visual Basic a naturellement choisi le pire des deux mondes en le rendant configurable.) Il n'est donc certainement pas comme tous les autres langages utilisant l'indexation basée sur 0. Pour ce que ça vaut, XPath et XQuery utilisent également l'indexation basée sur 1.
Bien que la plupart des programmeurs soient familiarisés avec l'indexation basée sur 1 et 0, les personnes normales compteront naturellement à partir de 1, et CSS est un langage conçu non seulement pour les programmeurs mais aussi pour les concepteurs et les professionnels du graphisme, il est donc naturel de choisir l'indexation basée sur 1 .
À partir de Spécification du sélecteur CSS niveau :
6.6.5.2. : pseudo-classe nth-child ()
La notation de pseudo-classe
:nth-child(an+b)
représente un élément qui a des frères et sœursan+b-1
Devant lui dans l'arborescence du document, pour tout entier positif ou valeur nulle den
, et a un parent élément. Pour les valeurs dea
etb
supérieures à zéro, cela divise efficacement les enfants de l'élément en groupes d'élémentsa
(le dernier groupe prenant le reste) et en sélectionnantb
th élément de chaque groupe. Par exemple, cela permet aux sélecteurs d'adresser toutes les autres lignes d'un tableau et peut être utilisé pour alterner la couleur du texte du paragraphe dans un cycle de quatre. Les valeursa
etb
doivent être des entiers (positifs, négatifs ou zéro). L'index du premier enfant d'un élément est 1.
Il va beaucoup plus en détail avec des exemples. Il semble que le calcul final de an+b
Doit totaliser un nombre positif.
Lorsque
a
= 0, la partie an n'a pas besoin d'être incluse (sauf si la partieb
est déjà omise). Lorsquean
n'est pas inclus etb
n'est pas négatif, le signe + avantb
(lorsqu'il est autorisé) peut également être omis. Dans ce cas, la syntaxe se simplifie en:nth-child(b)
.Si
a
etb
sont tous deux égaux à zéro, la pseudo-classe ne représente aucun élément dans l'arborescence du document.
Le formatage supplémentaire dans le dernier paragraphe est le mien pour ajouter de l'emphase.
Probablement pour la cohérence avec XPath, un autre langage de traitement XML/HTML. Ce qui pose la question, pourquoi XPath utilise-t-il une indexation basée sur 1?
Voir https://stackoverflow.com/questions/3319341/why-do-indexes-in-xpath-start-with-1-and-not-
La citation pertinente (mais controversée) est:
"... La logique basée sur 1 était le bon choix pour XPath et XSLT ... car le langage a été conçu pour les utilisateurs, pas pour les programmeurs, et les utilisateurs ont toujours cette vieille habitude de se référer au premier chapitre d'un livre comme Chapitre un..."