CSSの:nth-​​child()が0ではなく1から始まるのはなぜですか?


15

なぜ:nth-​​child()はゼロではなく1から反復するのですか?

この例に示すように。なぜ2番目ではなく最初の要素を選択するのですか?

p :nth-child(1)

12
「配列インデックスは0か1から始まるべきですか?0.5の私の妥協は、適切な考慮なしに拒否されました。」-スタンケリーブートル
メイソンウィーラー

1
私はこれがいくつかの近い票を集めると思うので、少なくとも理論的にはCSSの1-インデックスの他の例を引用して一貫性を主張することによってこれに客観的に答えることができるか、または実際にCSS標準を決定する人々。私はCSSについて自分でそれを行うのに十分な知識がありませんが他のすべてが0からインデックス付けされている理由を正当化せずに明白な「それは普通の人間が数える方法」引数を作る答えを支持しない限り、これを開いたままにしておいても問題はありません。
Ixrec

1
@lxrec:「他のすべては0でインデックス付けされている」という主張は正当化されるべきだと思います。エリザベス女王ゼロ、クリスマスのゼロ日、左のゼロストリート、またはページのゼロワードとは言いません。
ジャックB

@lxrec私の答えでは、XPathは1ベースのインデックス付けの先例として引用されています。それが実際に要因なのか、単なる偶然なのかはわかりませんが、別のXMLに焦点を当てたシステムなので、理にかなっています。
user949300

回答:


15

自分の子供を数える場合、「私のゼロ番目の子供」ではなく、「私の最初の子供」、「私の2番目の子供」などと言います。これは単に人間が数える方法です。(注:これは私による主観的な意見ではありません。これは文字通り序数が機能する方法です。)

あなたが質問をする理由はおそらくあなたがプログラマーであり、多くのプログラミング言語が0から配列とリスト項目にインデックスを付けているからでしょう。最初のアイテムのインデックスは、このポインタからの相対オフセットです。つまりarray[0]、最初のアイテムのアドレスを意味し、最初のアイテムのアドレスと1アイテムarray[1]のサイズ、つまり2番目のアイテムなどを意味します。

ポインター演算を直接サポートしない多くの高レベル言語では、一貫性と親しみやすさのために0ベースのインデックスが保持されています。たとえば、JavaScriptの配列がまったく異なる方法で実装されている場合でも、JavaScriptを含むC派生構文を持つすべての言語。しかし、これはまったく普遍的ではありません-COBOL、Fortran、Lua、および一部のBasicなどの言語は1ベースのインデックスを使用します。(Visual Basicは、当然、構成可能にすることで両方の世界の最悪のものを選択しました。)したがって、他のすべての言語が0ベースのインデックスを使用することは間違いありません。XPathとXQueryは、その価値に応じて1ベースのインデックス作成も使用します。

ほとんどのプログラマーは1と0の両方のインデックス付けに慣れていますが、普通の人は当然1から数えます。CSSはプログラマーだけでなく、デザイナーやグラフィックの専門家のために設計された言語なので、1ベースのインデックス付けを選択するのが自然です。



1
CSSが主に非プログラマーによる使用を意図していると思われるという回答があれば役立ちます(何らかの形でバックアップすることが望ましい)
-gnat

1
@gnatプログラミングのどこかで、子が0番目と言われる項目はありますか?セレクタはn番目の子であるため、最初から開始するのが論理的です。
サミKuhmonen 16

1
最後の段落を除くすべてを削除できますか?他のすべては、このSEに関する一般的な知識です。「ほとんどのプログラマが...... 1ベースのインデックス作成を選択するのは自然なことですが」
-0fnt

2
私はあなたの答えに同意しませんが、私たちが数えることの多くは1からは始まりません。あなたは人生の最初の年は0歳です。あなたは1から始めません。その日は始まりません。午前1:00-午前0:00から開始私の家からの移動距離を測定するとき、ゼロから開始します。ゼロから数えることは、人間にとっては1から数えることと同じくらい自然です-それは文脈に依存しますが、私たちのゼロ番目の子供について決して話さないことは正しいです:)
アーロンラスムッセン

6

CSSレベル3セレクター仕様

6.6.5.2。:nth-​​child()擬似クラス

:nth-child(an+b)擬似クラス表記は有する元素を表しan+b-1、任意の正の整数またはゼロ値に対して、文書ツリー内のその前の兄弟をn、親要素を有しています。値についてabゼロよりも大きい、これは効果のグループに要素の子を分割a要素(最後のグループは余りをとる)、および選択b、各グループの第要素。たとえば、これにより、セレクターはテーブル内の1行おきにアドレス指定でき、4サイクルで段落テキストの色を変えるために使用できます。aそしてb値は整数(正、負、またはゼロ)でなければなりません。要素の最初の子のインデックスは1です。

例でさらに詳しく説明します。最終的な計算のan+b合計は正数になるようです。

場合a0(=ない限り、一部の必要性が含まれていないb部分が既に省略されています)。場合にan含まれず、b非負、前に+記号であるb(許可された場合に)省略することもできます。この場合、構文はに簡略化され:nth-child(b)ます。

両方の場合abゼロに等しい、擬似クラスは、文書ツリー内のどの要素を表します。

最後の段落の追加の書式設定は、強調するためのものです。


0

おそらく、別のXML / HTML処理言語であるXPathとの一貫性のために。どちらが質問を頼みます、なぜXPathは1ベースのインデックスを使用しますか?

/programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0を参照してください

関連する(ただし、議論の余地のある引用)は:

「... 1ベースのロジックは、XPathとXSLTの正しい選択でした...言語はプログラマー向けではなくユーザー向けに設計されていたため、ユーザーは本の最初の章を第一章..."

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.