Perché: nth-child () esegue iterazione da uno al posto di zero?
Come mostrato in questo esempio . Perché seleziona il primo elemento e non il secondo quando
p :nth-child(1)
Se conti i tuoi figli, diresti "il mio primo figlio", "il mio secondo figlio" e così via, non "il mio bambino zeroth". Questo è semplicemente il modo in cui gli umani contano. (Nota: questa non è una mia opinione soggettiva, questo è letteralmente come funziona numeri ordinali .)
Il motivo per cui poni la domanda è probabilmente perché sei un programmatore, e molti linguaggi di programmazione indicizzano array e voci di elenco da 0. Il motivo è che in linguaggi di basso livello come C, un array è davvero un puntatore a l'indirizzo di memoria del primo elemento e l'indice è un offset relativo a questo puntatore. Quindi array[0]
significa l'indirizzo del primo elemento, array[1]
significa l'indirizzo del primo elemento più la dimensione di 1 elemento, cioè il secondo elemento e così via.
Molti linguaggi di livello superiore che non supportano l'aritmetica del puntatore hanno conservato l'indicizzazione basata su 0 per coerenza e familiarità. Ad esempio tutte le lingue con sintassi derivata da C, incluso JavaScript, anche se gli array in JavaScript sono implementati in un modo completamente diverso. Ma questo non è affatto universale - linguaggi come COBOL, Fortran, Lua e alcuni di Basic usano l'indicizzazione basata su 1. (Visual Basic naturalmente ha scelto il peggiore dei due mondi rendendolo configurabile.) Quindi non è assolutamente come ogni altra lingua usa l'indicizzazione basata su 0. Per quanto vale, XPath e XQuery utilizzano anche l'indicizzazione basata su 1.
Sebbene la maggior parte dei programmatori abbia familiarità con l'indicizzazione basata su 1 e 0, le persone normali contano naturalmente da 1 e CSS è un linguaggio progettato non solo per i programmatori ma per i progettisti e i professionisti della grafica, quindi è naturale scegliere 1 indicizzazione basata su.
Dalla Specifica del selettore Livello 3 CSS :
6.6.5.2. :nth-child() pseudo-class
The
:nth-child(an+b)
pseudo-class notation represents an element that hasan+b-1
siblings before it in the document tree, for any positive integer or zero value ofn
, and has a parent element. For values ofa
andb
greater than zero, this effectively divides the element's children into groups ofa
elements (the last group taking the remainder), and selecting theb
th element of each group. For example, this allows the selectors to address every other row in a table, and could be used to alternate the color of paragraph text in a cycle of four. Thea
andb
values must be integers (positive, negative, or zero). The index of the first child of an element is 1.
È molto più dettagliato con esempi. Sembra che il calcolo finale di an+b
debba essere totale a un numero positivo.
When
a
=0, the an part need not be included (unless theb
part is already omitted). Whenan
is not included andb
is non-negative, the + sign beforeb
(when allowed) may also be omitted. In this case the syntax simplifies to:nth-child(b)
.If both
a
andb
are equal to zero, the pseudo-class represents no element in the document tree.
La formattazione aggiuntiva nell'ultimo paragrafo è mia per aggiungere enfasi.
Probabilmente per coerenza con XPath, un altro linguaggio di elaborazione XML / HTML. Il che fa sorgere la domanda, perché XPath usa l'indicizzazione basata su 1?
Vedi link
La citazione pertinente (ma controversa) è:
"... La logica basata su 1 è stata la scelta giusta per XPath e XSLT ... perché il linguaggio è stato progettato per gli utenti, non per i programmatori, e gli utenti hanno ancora questa abitudine vecchio stile di riferirsi al primo capitolo in un libro come primo capitolo ... "
Il conteggio dei computer è iniziato con i binari 0 e 1. Segue la notazione n [0] delle variabili scientifiche che la trovano tipica della matematica. Questa convenzione è continuata per secoli in tutte le scienze e matematica. Con l'inizio dei linguaggi di markup. Quali sono più di una guida di stile per gli interpreti per elaborare il testo. Gli utenti aziendali scelgono di iniziare a contare a 1 perché era naturale per i singoli e i documenti non scientifici. Ma la sintassi del markup e l'originatore non hanno seguito la convenzione perché HTML non è un costrutto scientifico. Non è un vero linguaggio di programmazione, ma una guida di stile per un particolare interprete, che ha fatto grandi progressi o negli ultimi 30 anni (la creazione di HTML è stata nel 1989).
Per favore non offendersi per il commento non scientifico è solo la verità. È stato progettato per gli uomini d'affari e non per gli scienziati.
Leggi altre domande sui tag html css web-design