Perché: nth-child () in CSS inizia da 1 invece di 0?

11

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)
    
posta user51349 02.04.2016 - 11:43
fonte

4 risposte

11

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.

    
risposta data 02.04.2016 - 12:22
fonte
5

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 has an+b-1 siblings before it in the document tree, for any positive integer or zero value of n, and has a parent element. For values of a and b greater than zero, this effectively divides the element's children into groups of a elements (the last group taking the remainder), and selecting the bth 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. The a and b 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 the b part is already omitted). When an is not included and b is non-negative, the + sign before b (when allowed) may also be omitted. In this case the syntax simplifies to :nth-child(b).

If both a and b are equal to zero, the pseudo-class represents no element in the document tree.

La formattazione aggiuntiva nell'ultimo paragrafo è mia per aggiungere enfasi.

    
risposta data 03.04.2016 - 20:59
fonte
0

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 ... "

    
risposta data 17.10.2017 - 01:37
fonte
-2

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.

    
risposta data 16.10.2017 - 22:57
fonte

Leggi altre domande sui tag