Pourquoi: nth-child () répète-t-il un au lieu de zéro?
Comme le montre cet exemple . Pourquoi sélectionne-t-il le premier élément et non le second quand
p :nth-child(1)
Pourquoi: nth-child () répète-t-il un au lieu de zéro?
Comme le montre cet exemple . Pourquoi sélectionne-t-il le premier élément et non le second quand
p :nth-child(1)
Réponses:
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 les nombres ordinaux fonctionnent.)
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. Signifie donc l' array[0]
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 de 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 connaissent à la fois 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 la spécification du sélecteur CSS niveau 3 :
6.6.5.2. : pseudo-classe nth-child ()
La
:nth-child(an+b)
notation de pseudo-classe représente un élément qui a desan+b-1
frères et sœurs avant lui dans l'arborescence du document, pour tout entier positif ou valeur nulle den
, et qui a un élément parent. Pour les valeurs supérieuresa
oub
égales à zéro, cela divise efficacement les enfants de l'élément en groupes d'a
éléments (le dernier groupe prenant le reste) et sélectionne leb
e é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 en 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 jusqu'à un nombre positif.
Lorsque
a
= 0, la partie an n'a pas besoin d'être incluse (sauf si lab
partie 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 les deux
a
etb
sont é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 /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0
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..."