Neden: CSS'deki nth-child () 0 yerine 1'den başlar?


15

Neden: nth-child () sıfır yerine birinden yineliyor?

Bu örnekte gösterildiği gibi . Neden ilk öğeyi seçiyor, ikinci öğeyi değil

p :nth-child(1)

12
"Dizi indeksleri 0 ya da 1'den başlamalı mı? 0,5 ​​benim uzlaşmam doğru düşünülmeden reddedildi." - Stan Kelly-Bootle
Mason Wheeler

1
Bunun birkaç yakın oy alacağından şüphelendiğim için, bunu açık bırakıyorum çünkü en azından teorik olarak CSS'deki 1-endekslemenin diğer örneklerine atıfta bulunarak veya tutarlılık iddia ederek veya bunlardan birinden ilgili bir ifade bularak objektif olarak cevaplamak mümkün CSS standartlarına karar veren insanlar. CSS hakkında bunu kendim yapmak için neredeyse yeterli bir şey bilmiyorum, ancak diğer her şeyin neden 0-endekslendiğine dair herhangi bir gerekçe olmadan açık "normal insanların saydığı" argümanını ortaya koyan herhangi bir cevabı geçersiz kılmadığımız sürece , bunu açık bırakmanın hiçbir zararı yok.
Ixrec

1
@lxrec: Bence haklı olması gereken "her şey 0 dizinli" bir iddia. Kraliçe Elizabeth Zeroth, Noel'in sıfırıncı günü, soldaki sıfırıncı cadde veya sayfadaki sıfırıncı kelime demiyorsunuz.
JacquesB

@lxrec Cevabımda XPath, 1 tabanlı indeksleme için emsal olarak gösteriliyor. Bunun bir faktör mü yoksa sadece bir tesadüf mü olduğundan emin değil, ama XML odaklı başka bir sistem bu yüzden mantıklı.
user949300

Yanıtlar:


15

Kendi çocuklarınızı sayarsanız, "sıfır çocuğum" değil, "ilk çocuğum", "ikinci çocuğum" vb. Dersiniz. İnsanlar böyle sayılır. (Not: Bu benim tarafımdan bazı öznel görüşler değil. Tam anlamıyla sıra sayıları böyle çalışıyor.)

Soruyu sormanızın nedeni muhtemelen bir programcı olmanızdır ve birçok programlama dili dizi ve liste öğelerini 0'dan indeksler. Bunun nedeni, C gibi düşük seviyeli dillerde bir dizinin gerçekten bellek adresinin bir göstergesidir. ve indeks bu göstergeye göre bir ofsettir. Yani array[0]ilk öğenin adresi, ilk öğenin array[1]adresi artı 1 öğenin boyutu, yani ikinci öğenin vb. Anlamına gelir.

İşaretçi aritmetiği desteklemeyen birçok üst düzey dil, tutarlılık ve aşinalık için 0 tabanlı endekslemeyi doğrudan korumuştur. Örneğin, JavaScript'teki diziler tamamen farklı bir şekilde uygulansa da, C türetilmiş sözdizimine sahip tüm diller - JavaScript dahil. Ancak bu hiç de evrensel değildir - COBOL, Fortran, Lua ve bazı Basic'ler gibi 1 tabanlı dizinleme kullanır. (Visual Basic, doğal olarak her iki dünyanın en kötüsünü yapılandırılabilir hale getirerek seçti.) Bu nedenle, diğer tüm diller 0 tabanlı endeksleme kullanmıyor gibi. Değeri için, XPath ve XQuery de 1 tabanlı indeksleme kullanır.

Çoğu programcı hem 1 hem de 0 tabanlı endekslemeye aşina olsa da, normal insanlar doğal olarak 1'den sayılır ve CSS sadece programcılar için değil, tasarımcılar ve grafik uzmanları için tasarlanmış bir dildir, bu nedenle 1 tabanlı endekslemeyi seçmek doğaldır .



1
cevabınız, CSS'nin öncelikle programcı olmayanlar tarafından kullanılmak üzere tasarlandığını düşündüğünüzden bahsediyorsa (tercihen bir şekilde yedeklenir)
gnat

1
@gnat Programlamada çocuğun sıfır olduğu söylenen herhangi bir öğe var mı? Seçici nth-child olduğundan, ilkinden başlamak mantıklıdır.
Sami Kuhmonen

1
Son paragraf dışındaki her şeyi silebilir misiniz? Diğer her şey bu SE hakkında ortak bilgidir. "Çoğu programcı ...... 1 tabanlı indeksleme seçmek doğal"
0fnt

2
Cevabınıza katılmıyorum, ancak saydığımız birçok şey 1'de başlamıyor. Hayatınızın ilk yılı için 0 yaşındasınız - 1'de başlamıyorsunuz. Gün başlamıyor 01:00 - 0:00 başlar Evimden kat edilen mesafeyi ölçtüğümde sıfırdan başlıyorum. Sıfırdan saymak, insanlar için birinden saymak kadar doğaldır - içeriğe bağlıdır, ancak sıfırıncı çocuğumuzdan asla söz etmeyeceğimiz konusunda haklısınız :)
Aaron Rasmussen

6

Gönderen CSS Seviye 3 Seçici Şartname :

6.6.5.2. : nth-child () sözde sınıfı

:nth-child(an+b)Sözde sınıf gösterimi olan bir öğeyi temsil eden an+b-1bir pozitif tam sayı ya da sıfır değeri için, belge ağacındaki daha önce kardeşler nve bir üst elemanına sahiptir. Sıfır ave bdaha büyük değerler için bu, öğenin çocuklarını etkin bir şekilde öğe gruplarına böler a(geri kalanı alan son grup) ve bher grubun th öğesini seçer. Örneğin, bu, seçicilerin bir tablodaki diğer tüm satırları ele almasına olanak tanır ve paragraf metninin rengini dört döngüde değiştirmek için kullanılabilir. aVe bdeğerler tamsayı (pozitif, negatif veya sıfır) olması gerekir. Bir elemanın ilk alt indeksi 1'dir.

Örneklerle çok daha fazla ayrıntıya giriyor. Görünüşe göre nihai hesaplaması an+bpozitif bir sayıya eşit olmalıdır.

Tüm a= 0 (sürece, bir parça ihtiyacı olmayan dahil bkısmı zaten çıkarılmıştır). Zaman andahil değildir ve bnegatif olmayan, daha önce + işaretidir b(izin verildiğinde), iptal de edilebilir. Bu durumda sözdizimi basitleşir :nth-child(b).

Her ikisi de ave bsıfıra eşitse, sözde sınıf belge ağacında hiçbir öğeyi temsil etmez.

Son paragrafta ek biçimlendirme vurgulamak benimdir.


0

Muhtemelen başka bir XML / HTML işleme dili olan XPath ile tutarlılık için. Hangi soruyu soruyor, XPath neden 1 tabanlı indeksleme kullanıyor?

Bkz. Https://stackoverflow.com/questions/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0

İlgili (ancak tartışmalı alıntı):

"... XPath ve XSLT için 1 tabanlı mantık doğru seçimdi ... çünkü dil, programcılar için değil kullanıcılar için tasarlandı ve kullanıcılar hala bir kitaptaki ilk bölüme atıfta bulunma alışkanlığına sahipler. Birinci bölüm..."

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.