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)
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)
Jawaban:
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 .
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 memilikian+b-1
saudara kandung sebelum di pohon dokumen, untuk setiap bilangan bulat positif atau nol nilain
, dan memiliki elemen induk. Untuk nilai-nilaia
danb
lebih besar dari nol, ini secara efektif membagi anak-anak elemen menjadi kelompok-kelompoka
elemen (kelompok terakhir mengambil sisanya), dan memilihb
elemen 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. Nilaia
danb
harus 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+b
harus total ke angka positif.
Ketika
a
= 0, bagian tidak perlu dimasukkan (kecualib
bagian sudah dihilangkan). Ketikaan
tidak termasuk danb
tidak negatif, tanda + sebelumb
(bila diizinkan) juga dapat dihilangkan. Dalam hal ini sintaksinya disederhanakan menjadi:nth-child(b)
.Jika keduanya
a
danb
sama dengan nol, pseudo-class tidak mewakili elemen dalam pohon dokumen.
Pemformatan tambahan dalam paragraf terakhir adalah milik saya untuk menambahkan penekanan.
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..."