Warum iteriert nth-child () von eins statt von null?
Wie in diesem Beispiel gezeigt . Warum wählt es das erste Element und nicht das zweite, wenn
p :nth-child(1)
Warum iteriert nth-child () von eins statt von null?
Wie in diesem Beispiel gezeigt . Warum wählt es das erste Element und nicht das zweite, wenn
p :nth-child(1)
Antworten:
Wenn Sie Ihre eigenen Kinder zählen, würden Sie "mein erstes Kind", "mein zweites Kind" und so weiter sagen, nicht "mein nulltes Kind". So zählt einfach der Mensch. (Hinweis: Dies ist keine subjektive Meinung von mir. So funktionieren Ordnungszahlen buchstäblich .)
Der Grund, warum Sie diese Frage stellen, ist wahrscheinlich, dass Sie ein Programmierer sind und viele Programmiersprachen Array- und Listenelemente von 0 indizieren. Der Grund dafür ist, dass ein Array in einfachen Sprachen wie C wirklich ein Zeiger auf die Speicheradresse ist des ersten Elements und der Index ist ein Offset relativ zu diesem Zeiger. Bedeutet array[0]
also die Adresse des ersten Artikels, array[1]
bedeutet die Adresse des ersten Artikels plus der Größe von 1 Artikel, dh des zweiten Artikels und so weiter.
Viele übergeordnete Sprachen, die Zeigerarithmetik nicht direkt unterstützen, haben die 0-basierte Indexierung aus Gründen der Konsistenz und Vertrautheit beibehalten. Zum Beispiel alle Sprachen mit C-abgeleiteter Syntax - einschließlich JavaScript, obwohl Arrays in JavaScript auf völlig andere Weise implementiert sind. Dies ist jedoch keineswegs universell - Sprachen wie COBOL, Fortran, Lua und einige Basic verwenden eine 1-basierte Indexierung. (Visual Basic hat natürlich das Schlimmste aus beiden Welten ausgewählt, indem es konfigurierbar gemacht wurde.) Es ist also definitiv nicht so, dass jede andere Sprache eine 0-basierte Indizierung verwendet. XPath und XQuery verwenden auch eine 1-basierte Indizierung.
Während die meisten Programmierer sowohl mit der 1-basierten als auch mit der 0-basierten Indizierung vertraut sind, zählen normale Leute natürlich ab 1, und CSS ist eine Sprache, die nicht nur für Programmierer, sondern auch für Designer und Grafikprofis entwickelt wurde .
Aus der CSS Level 3 Selector-Spezifikation :
6.6.5.2. : nth-child () Pseudoklasse
Die
:nth-child(an+b)
Pseudoklassen-Notation stellt ein Element dar,an+b-1
vor dem im Dokumentbaum Geschwister stehen, für jeden positiven Ganzzahl- oder Nullwert vonn
, und verfügt über ein übergeordnetes Element. Für Werte vona
undb
größer als Null ist , teilt dies effektiv die Kinder in Gruppen von Element -a
Elemente (die letzte Gruppe , den Rest unter) und das Auswählenb
te Element von jeder Gruppe. Auf diese Weise können die Selektoren beispielsweise jede zweite Zeile in einer Tabelle ansprechen und die Farbe des Absatztextes in einem Viertakt abwechseln. Die Wertea
undb
müssen Ganzzahlen sein (positiv, negativ oder null). Der Index des ersten untergeordneten Elements eines Elements ist 1.
Es wird viel detaillierter mit Beispielen. Es scheint, dass die endgültige Berechnung von an+b
muss insgesamt eine positive Zahl sein.
Wenn
a
= 0, muss ein Teil nicht enthalten sein (es sei denn, derb
Teil ist bereits weggelassen). Wennan
nicht enthalten undb
nicht negativ ist, kann das Pluszeichenb
(sofern zulässig) auch weggelassen werden. In diesem Fall vereinfacht sich die Syntax zu:nth-child(b)
.Wenn beide
a
undb
gleich Null sind, repräsentiert die Pseudoklasse kein Element im Dokumentbaum.
Die zusätzliche Formatierung im letzten Absatz dient der Hervorhebung.
Wahrscheinlich aus Gründen der Konsistenz mit XPath, einer anderen XML / HTML-Verarbeitungssprache. Was wirft die Frage auf, warum XPath 1-basierte Indizierung verwendet?
Siehe /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0
Das relevante (aber kontroverse Zitat) ist:
"... 1-basierte Logik war die richtige Wahl für XPath und XSLT ..., da die Sprache für Benutzer und nicht für Programmierer entwickelt wurde und Benutzer immer noch die altmodische Angewohnheit haben, auf das erste Kapitel eines Buches als zu verweisen Kapitel eins..."