The :nth-child
pemilih memungkinkan Anda untuk memilih satu atau lebih elemen berdasarkan urutan sumber mereka, menurut formula.
/* Select the first list item */ li:nth-child(1) ( ) /* Select the 5th list item */ li:nth-child(5) ( ) /* Select every other list item starting with first */ li:nth-child(odd) ( ) /* Select every 3rd list item starting with first */ li:nth-child(3n - 2) ( ) /* Select every 3rd list item starting with 2nd */ li:nth-child(3n - 1) ( ) /* Select every 3rd child item, as long as it has class "el" */ .el:nth-child(3n) ( )
Ini didefinisikan dalam spesifikasi CSS Selectors Level 3 sebagai "struktural pseudo-class", yang berarti digunakan untuk mengatur gaya konten berdasarkan hubungannya dengan elemen induk dan saudara kandung.
Misalkan kita sedang membangun grid CSS, dan ingin menghapus margin pada setiap modul grid keempat. Inilah HTML itu:
One Two Three Four Five
Daripada menambahkan kelas ke setiap item keempat (misalnya .last
), kita dapat menggunakan :nth-child
:
.module:nth-child(4n) ( margin-right: 0; )
The :nth-child
pemilih membawa argumen: ini bisa menjadi bilangan bulat, kata kunci even
, odd
atau formula. Jika bilangan bulat ditentukan, hanya satu elemen yang dipilih-tetapi kata kunci atau rumus akan mengulang melalui semua turunan dari elemen induk dan memilih elemen yang cocok - mirip dengan menavigasi item dalam larik JavaScript. Kata kunci "genap" dan "ganjil" bersifat langsung (masing-masing 2, 4, 6, dll. Atau 1, 3, 5). Rumusnya dibuat menggunakan sintaks an+b
, di mana:
- "A" adalah nilai integer
- “N” adalah huruf literal “n”
- “+” Adalah operator dan bisa berupa “+” atau “-”
- “B” adalah bilangan bulat dan diperlukan jika operator disertakan dalam rumus
Penting untuk dicatat bahwa rumus ini adalah persamaan, dan mengulangi setiap elemen saudara kandung, menentukan mana yang akan dipilih. Bagian "n" dari rumus, jika disertakan, mewakili himpunan bilangan bulat positif yang meningkat (seperti melakukan iterasi melalui larik). Dalam contoh di atas, kami memilih setiap elemen keempat dengan rumus 4n
, yang berfungsi karena setiap kali elemen dicentang, "n" bertambah satu (4 × 0, 4 × 1, 4 × 2, 4 × 3, dll). Jika urutan elemen cocok dengan hasil persamaan, itu akan dipilih (4, 8, 12, dll). Untuk penjelasan lebih mendalam tentang matematika yang terlibat, silakan baca artikel ini.
Untuk menggambarkan lebih jauh, berikut beberapa contoh :nth-child
penyeleksi yang valid :
Untungnya, Anda tidak selalu harus menghitung sendiri - ada beberapa :nth-child
penguji dan generator di luar sana:
- Penguji Trik CSS
- Penguji Lea Verou
: anak-n (an + b dari)
Ada filter yang tidak banyak diketahui yang dapat ditambahkan :nth-child
sesuai dengan spesifikasi CSS Selectors: Kemampuan untuk memilih :nth-child
bagian dari elemen, menggunakan of
format. Misalkan Anda memiliki daftar konten campuran: Beberapa memiliki kelas .video
, beberapa memiliki kelas .picture
, dan Anda ingin memilih 3 gambar pertama. Anda dapat melakukannya dengan filter "dari" seperti ini:
:nth-child(-n+3 of .picture) ( /* Selects the first 3 elements applied not to ALL children but only to those matching .picture */ )
Perhatikan bahwa ini berbeda dengan menambahkan selektor langsung ke :nth-child
selektor:
.picture:nth-child(-n+3) ( /* Not the same! This applies to elements matching .picture which _also_ match :nth-child(-n+3) */ )
Ini bisa sedikit membingungkan, jadi contoh dapat membantu menggambarkan perbedaannya:
Dukungan browser untuk filter "of" sangat terbatas: Pada tulisan ini, hanya Safari yang mendukung sintaks. Untuk memeriksa status browser favorit Anda, berikut adalah masalah terbuka yang terkait dengan :nth-child(an+b of s)
:
- Firefox: Dukungan untuk anak ke-n (An + B sel)
- Chrome: Implementasikan: n-anak (an + b dari S)
Tempat Menarik
:nth-child
iterasi melalui elemen mulai dari atas urutan sumber. Satu-satunya perbedaan antara itu dan:nth-last-child
adalah bahwa yang terakhir melakukan iterasi melalui elemen-elemen yang dimulai dari bagian bawah urutan sumber.- Sintaks untuk memilih
n
nomor pertama elemen agak kontra-intuitif. Anda mulai dengan-n
, ditambah jumlah elemen positif yang ingin Anda pilih. Misalnya,li:nth-child(-n+3)
akan memilih 3li
elemen pertama . - The
:nth-child
pemilih sangat mirip dengan:nth-of-type
tetapi dengan satu perbedaan penting: itu adalah kurang spesifik. Dalam contoh kita di atas, mereka akan menghasilkan hasil yang sama karena kita hanya melakukan iterasi pada.module
elemen, tetapi jika kita melakukan iterasi pada grup saudara yang lebih kompleks,:nth-child
akan mencoba mencocokkan semua saudara, tidak hanya saudara dari jenis elemen yang sama. Ini menunjukkan kekuatan:nth-child
-it dapat memilih elemen saudara dalam sebuah pengaturan, tidak hanya elemen yang ditentukan sebelum titik dua.
Dukungan Browser
Chrome | Safari | Firefox | Opera | YAITU | Android | iOS |
---|---|---|---|---|---|---|
Apa saja | 3.2+ | Apa saja | 9,5+ | 9+ | Apa saja | Apa saja |
:nth-child
diperkenalkan di CSS Selectors Module 3, yang berarti browser versi lama tidak mendukungnya. Namun, dukungan browser modern sangat sempurna, dan pseudo-selector baru digunakan secara luas di lingkungan produksi. Jika Anda memerlukan dukungan browser yang lebih lama, baik polyfill untuk IE, atau gunakan penyeleksi ini dengan cara yang tidak kritis seperti peningkatan progresif, yang direkomendasikan.