Mengapa: nth-child () di CSS mulai dari 1 bukannya 0?

15

Mengapa: nth-child () beralih dari satu alih-alih nol?

Seperti yang ditunjukkan dalam contoh ini . Mengapa ia memilih elemen pertama dan bukan yang kedua saat

p :nth-child(1)
pengguna51349
sumber
12
"Haruskah indeks array dimulai pada 0 atau 1? Kompromi 0,5 saya ditolak tanpa, saya pikir, pertimbangan yang tepat." - Stan Kelly-Bootle
Mason Wheeler
1
Karena saya menduga ini akan menarik beberapa suara dekat, saya membiarkan ini terbuka karena setidaknya secara teori dimungkinkan untuk menjawab ini secara objektif dengan mengutip contoh-contoh lain dari pengindeksan 1 dalam CSS dan mengklaim konsistensi, atau menemukan pernyataan yang relevan dari salah satu orang-orang yang benar-benar membuat keputusan standar CSS. Saya tidak tahu cukup banyak tentang CSS untuk melakukan itu sendiri, tetapi selama kita tidak mengungguli jawaban yang membuat jelas "itu adalah cara manusia normal menghitung" argumen tanpa alasan mengapa semua yang lain diindeks 0, kemudian tidak ada salahnya membiarkan ini terbuka.
Ixrec
1
@ lxrec: Saya pikir itu adalah klaim bahwa "semua yang lain adalah 0-diindeks" yang harus dibenarkan. Anda tidak mengatakan Ratu Elizabeth Zeroth, Hari Natal di Zeroth, jalan Zeroth ke kiri atau kata Zeroth di halaman.
JacquesB
@ lxrec Dalam jawaban saya, XPath dikutip sebagai preseden untuk pengindeksan berbasis 1. Tidak yakin apakah itu benar-benar merupakan faktor, atau hanya kebetulan, tapi ini adalah sistem terfokus XML lain sehingga masuk akal.
user949300

Jawaban:

15

Jika Anda menghitung anak-anak Anda sendiri, Anda akan mengatakan "anak pertama saya", "anak kedua saya" dan seterusnya, bukan "anak saya yang masih kecil". Beginilah cara manusia menghitung. (Catatan: Ini bukan pendapat subjektif dari saya. Ini secara harfiah bagaimana angka ordinal bekerja.)

Alasan Anda bahkan mengajukan pertanyaan mungkin karena Anda adalah seorang programmer, dan banyak bahasa pemrograman mengindeks array dan item daftar dari 0. Alasan untuk ini adalah bahwa dalam bahasa tingkat rendah seperti C, array benar-benar adalah penunjuk ke alamat memori dari item pertama dan indeks adalah offset relatif terhadap pointer ini. Jadi array[0]berarti alamat item pertama, array[1]berarti alamat item pertama plus ukuran 1 item, yaitu item kedua dan seterusnya.

Banyak bahasa tingkat tinggi yang tidak mendukung aritmatika pointer secara langsung mempertahankan pengindeksan berbasis 0 untuk konsistensi dan keakraban. Misalnya semua bahasa dengan sintaks yang diturunkan dari C - termasuk JavaScript, meskipun array dalam JavaScript diimplementasikan dengan cara yang sama sekali berbeda. Tapi ini sama sekali tidak universal - bahasa seperti COBOL, Fortran, Lua dan beberapa indeks menggunakan 1 berbasis Basic. (Visual Basic secara alami memilih yang terburuk dari kedua dunia dengan membuatnya dapat dikonfigurasi.) Jadi jelas tidak seperti setiap bahasa lainnya menggunakan pengindeksan berbasis 0. Untuk apa nilainya, XPath dan XQuery juga menggunakan pengindeksan berbasis 1.

Sementara sebagian besar programmer akan terbiasa dengan pengindeksan berbasis 1 dan 0, orang normal secara alami akan dihitung dari 1, dan CSS adalah bahasa yang dirancang tidak hanya untuk programmer tetapi untuk desainer dan profesional grafis, sehingga wajar untuk memilih pengindeksan berbasis 1 .

JacquesB
sumber
1
akan membantu jika jawaban Anda menyebutkan bahwa Anda percaya CSS terutama ditujukan untuk digunakan oleh non-programer (lebih disukai didukung entah bagaimana)
agas
1
@gnat Apakah ada di mana pun dalam pemrograman item mana pun di mana seorang anak dikatakan sebagai nol? Karena pemilih adalah anak ke-n, maka logis untuk memulai dari yang pertama.
Sami Kuhmonen
1
Bisakah Anda menghapus semuanya kecuali paragraf terakhir? Segala sesuatu yang lain adalah pengetahuan umum tentang SE ini. "Sementara sebagian besar programmer ...... alami untuk memilih pengindeksan berbasis 1"
0fnt
2
Saya tidak setuju dengan jawaban Anda, tetapi banyak hal yang kami hitung tidak dimulai dari 1. Anda berusia 0 tahun untuk tahun pertama kehidupan Anda - Anda tidak memulai pada 1. Hari tidak dimulai pada pukul 1:00 pagi - dimulai pada jam 0:00 pagi. Ketika saya mengukur jarak yang ditempuh dari rumah saya, saya mulai dari nol. Menghitung dari nol sama wajarnya bagi manusia dengan menghitung dari satu - itu tergantung pada konteksnya, walaupun Anda benar bahwa kita tidak akan pernah berbicara tentang anak noleth kita :)
Aaron Rasmussen
6

Dari Spesifikasi Pemilih Level 3 CSS :

6.6.5.2. : nth-child () pseudo-class

The :nth-child(an+b)notasi pseudo-class merupakan unsur yang memiliki an+b-1saudara kandung sebelum di pohon dokumen, untuk setiap bilangan bulat positif atau nol nilai n, dan memiliki elemen induk. Untuk nilai-nilai adan blebih besar dari nol, ini secara efektif membagi anak-anak elemen menjadi kelompok-kelompok aelemen (kelompok terakhir mengambil sisanya), dan memilih belemen ke-masing dari setiap kelompok. Misalnya, ini memungkinkan penyeleksi untuk mengatasi setiap baris lain dalam sebuah tabel, dan dapat digunakan untuk mengganti warna teks paragraf dalam siklus empat. Nilai adan bharus bilangan bulat (positif, negatif, atau nol). Indeks anak pertama dari suatu elemen adalah 1.

Ini masuk ke lebih banyak detail dengan contoh. Tampaknya perhitungan akhir an+bharus total ke angka positif.

Ketika a= 0, bagian tidak perlu dimasukkan (kecuali bbagian sudah dihilangkan). Ketika antidak termasuk dan btidak negatif, tanda + sebelum b(bila diizinkan) juga dapat dihilangkan. Dalam hal ini sintaksinya disederhanakan menjadi :nth-child(b).

Jika keduanya adan bsama dengan nol, pseudo-class tidak mewakili elemen dalam pohon dokumen.

Pemformatan tambahan dalam paragraf terakhir adalah milik saya untuk menambahkan penekanan.

Adam Zuckerman
sumber
0

Mungkin untuk konsistensi dengan XPath, bahasa pemrosesan XML / HTML lainnya. Yang menimbulkan pertanyaan, mengapa XPath menggunakan pengindeksan berbasis 1?

Lihat /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0

Kutipan yang relevan (tetapi kontroversial) adalah:

"... Logika berbasis 1 adalah pilihan yang tepat untuk XPath dan XSLT ... karena bahasa tersebut dirancang untuk pengguna, bukan untuk programmer, dan pengguna masih memiliki kebiasaan kuno merujuk pada bab pertama dalam sebuah buku sebagai Bab satu..."

pengguna949300
sumber