为什么CSS中的:nth-​​child()从1开始而不是0?


15

为什么:nth-​​child()从1而不是0进行迭代?

如本所示。为什么选择第一个元素而不选择第二个元素

p :nth-child(1)

12
“数组索引应该从0还是1开始?我认为,在没有适当考虑的情况下,我的0.5折衷被拒绝了。” -Stan Kelly-Bootle
Mason Wheeler

1
由于我怀疑这会吸引几票赞成票,因此我公开表示,因为从理论上讲,至少有可能客观地通过引用CSS中的1-indexing的其他示例并声称具有一致性,或者从以下一项中找到相关声明来客观地回答这一问题:真正制定CSS标准的人。我对CSS 知之甚少,但我自己做,但是只要我们不支持任何明显的“正常人如何计数”论点的答案,而又没有理由说明为什么其他所有东西都为0索引,那么保持开放状态没有任何害处。
Ixrec '16

1
@lxrec:我认为应该说“其他所有内容都为0索引”。您不会说伊丽莎白女王/王后零,圣诞节的第零天,左边的第零街或页面上的第零个字。
JacquesB '16

@lxrec在我的回答中,XPath被作为基于1的索引的先例。不知道它是否确实是一个因素,还是只是一个巧合,但是它是另一个关注XML的系统,因此很有意义。
user949300

Answers:


15

如果您算自己的孩子,您会说“我的第一个孩子”,“我的第二个孩子”等等,而不是“我的第一个孩子”。这就是人类的计数方式。(注意:这不是我的主观意见。这实际上是序数的工作方式。)

甚至问这个问题的原因可能是因为您是一名程序员,并且许多编程语言都将数组和列表项从0开始索引。其原因是,在像C这样的低级语言中,数组实际上是指向内存地址的指针第一项的索引是索引相对于此指针的偏移量。因此,array[0]意味着第一项的array[1]地址,意味着第一项的地址加上一项的大小,即第二项的大小,依此类推。

许多不直接支持指针算术的高级语言都保留了基于0的索引,以保持一致性和熟悉性。例如,即使JavaScript中的数组以完全不同的方式实现,所有具有C派生语法的语言(包括JavaScript)也是如此。但这根本不是通用的-COBOL,Fortran,Lua和某些Basic的语言都使用基于1的索引。(Visual Basic通过使其可配置而自然选择了两者中最糟糕的一个。)因此,绝对不是像其他每种语言都使用基于0的索引一样。出于其价值,XPath和XQuery还使用基于1的索引。

虽然大多数程序员都熟悉基于1和0的索引,但是普通人自然会从1开始计数,而CSS是一种语言,不仅为程序员设计,还为设计师和图形专业人员设计,因此选择基于1的索引是很自然的。 。



1
如果您的答案中提到您认为CSS主要供非程序员使用(最好以某种方式备份)
很有帮助

1
@gnat在编程中是否有任何项目可以说一个孩子是第零个?由于选择器是第n个子项,因此其逻辑从第一个开始。
Sami Kuhmonen '16

1
您可以删除除最后一段以外的所有内容吗?其他所有内容都是该SE的常识。“虽然大多数程序员......很自然地选择基于1的索引”
0fnt 2016年

2
我不同意您的回答,但我们认为许多事情并非以1开始。您人生第一年的年龄为0岁-您的起点不是1。在凌晨1:00-从凌晨0:00开始,当我测量从我家走过的距离时,我从零开始。从零开始计数对于人类来说与从一开始计数一样自然-它取决于上下文,尽管您是对的,我们永远不会谈论我们的零个孩子:)
Aaron Rasmussen

6

根据CSS 3级选择器规范

6.6.5.2。:nth-​​child()伪类

:nth-child(an+b)伪级符号代表具有一个元素an+b-1的兄弟姐妹之前它在文档树中,对于任何正整数或零值n,且具有父元素。对于值ab大于零,这有效地将所述元素的子元素的成组a元件(最后一组服用余数),并选择b每一组的第i个元素。例如,这允许选择器寻址表中的每隔一行,并可用于以四个为周期交替显示段落文本的颜色。的ab值必须是整数(正,负或零)。元素的第一个孩子的索引是1。

通过示例对它进行了更详细的介绍。看来,的最终计算an+b必须为正数。

a= 0时,不需要包括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

相关的(但有争议的报价)是:

“ ...基于X的逻辑是XPath和XSLT的正确选择...因为该语言是为用户而非程序员而设计的,并且用户仍然习惯于将书中的第一章称为第一章...”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.