The :nth-child
pemilih membolehkan anda untuk memilih satu atau lebih unsur-unsur berdasarkan perintah 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 bermaksud digunakan untuk menggayakan konten berdasarkan hubungannya dengan elemen ibu bapa dan saudara.
Andaikan kita membina grid CSS, dan ingin membuang margin pada setiap modul grid keempat. Inilah HTML:
One Two Three Four Five
Daripada menambahkan kelas ke setiap item keempat (contohnya .last
), kita dapat menggunakan :nth-child
:
.module:nth-child(4n) ( margin-right: 0; )
The :nth-child
pemilih mengambil hujah: ini boleh menjadi integer tunggal, kata kunci even
, odd
atau formula. Sekiranya bilangan bulat ditentukan hanya satu elemen yang dipilih-tetapi kata kunci atau formula akan berulang melalui semua anak elemen induk dan memilih elemen yang sepadan - serupa dengan menavigasi item dalam array JavaScript. Kata kunci "genap" dan "ganjil" adalah mudah (masing-masing 2, 4, 6, dll. Atau 1, 3, 5). Rumus dibina menggunakan sintaks an+b
, di mana:
- "A" adalah nilai integer
- "N" adalah huruf harfiah "n"
- "+" Adalah pengendali dan mungkin "+" atau "-"
- "B" adalah bilangan bulat dan diperlukan jika operator disertakan dalam formula
Penting untuk diperhatikan bahawa formula ini adalah persamaan, dan berulang melalui setiap elemen saudara, menentukan mana yang akan dipilih. Bahagian "n" dari formula, jika disertakan, mewakili sekumpulan bilangan bulat positif yang meningkat (seperti melakukan lelaran melalui array). Dalam contoh di atas, kami memilih setiap elemen keempat dengan formula 4n
, yang berfungsi kerana setiap kali elemen diperiksa, "n" meningkat satu (4 × 0, 4 × 1, 4 × 2, 4 × 3, dll). Sekiranya susunan elemen sepadan dengan hasil persamaan, ia akan dipilih (4, 8, 12, dll). Untuk penjelasan yang lebih mendalam mengenai matematik yang terlibat, sila baca artikel ini.
Untuk menggambarkan lebih lanjut, berikut adalah beberapa contoh :nth-child
pemilih yang sah :
Nasib baik, anda tidak perlu melakukan matematik sendiri-ada beberapa :nth-child
penguji dan penjana di luar sana:
- Penguji Trik CSS
- Penguji Lea Verou
: nth-child (an + b dari)
Terdapat penapis yang tidak diketahui yang dapat ditambahkan :nth-child
sesuai dengan spesifikasi Pemilih CSS: Keupayaan untuk memilih :nth-child
subset elemen, menggunakan of
format. Katakan anda mempunyai senarai kandungan campuran: Ada yang mempunyai kelas .video
, ada yang mempunyai kelas .picture
, dan anda mahu memilih 3 gambar pertama. Anda boleh melakukannya dengan penapis "of" seperti:
:nth-child(-n+3 of .picture) ( /* Selects the first 3 elements applied not to ALL children but only to those matching .picture */ )
Perhatikan bahawa ini berbeza dengan menambahkan pemilih secara langsung ke :nth-child
pemilih:
.picture:nth-child(-n+3) ( /* Not the same! This applies to elements matching .picture which _also_ match :nth-child(-n+3) */ )
Ini sedikit membingungkan, jadi contoh mungkin dapat menggambarkan perbezaannya:
Sokongan penyemak imbas untuk penapis "of" sangat terhad: Pada penulisan ini, hanya Safari yang menyokong sintaks tersebut. Untuk memeriksa status penyemak imbas kegemaran anda, berikut adalah isu terbuka yang berkaitan dengan :nth-child(an+b of s)
:
- Firefox: Sokongan untuk anak-anak (An + B sel)
- Chrome: Terapkan: nth-child (an + b dari S)
Tempat Menarik
:nth-child
berulang melalui elemen bermula dari bahagian atas susunan sumber. Satu-satunya perbezaan antara ia:nth-last-child
adalah bahawa yang terakhir berulang melalui elemen bermula dari bawah susunan sumber.- Sintaks untuk memilih
n
bilangan elemen pertama agak bertentangan intuitif. Anda mulakan dengan-n
jumlah elemen positif yang ingin anda pilih. Sebagai contoh,li:nth-child(-n+3)
akan memilih 3li
elemen pertama . - The
:nth-child
pemilih adalah hampir sama dengan:nth-of-type
tetapi dengan satu perbezaan kritikal: ia adalah kurang tertentu. Dalam contoh kita di atas, mereka akan menghasilkan hasil yang sama kerana kita melakukan iterasi hanya pada.module
elemen, tetapi jika kita melakukan lelaran pada kumpulan adik beradik yang lebih kompleks,:nth-child
akan cuba memadankan semua adik-beradik, bukan hanya adik-beradik dengan jenis elemen yang sama. Ini menunjukkan kekuatan:nth-child
-it dapat memilih unsur saudara dalam susunan, bukan hanya elemen yang ditentukan sebelum titik dua.
Sokongan Penyemak Imbas
Chrome | Safari | Firefox | Opera | IE | Android | iOS |
---|---|---|---|---|---|---|
Sebarang | 3.2+ | Sebarang | 9.5+ | 9+ | Sebarang | Sebarang |
:nth-child
diperkenalkan dalam CSS Selectors Module 3, yang bermaksud versi lama penyemak imbas tidak menyokongnya. Walau bagaimanapun, sokongan penyemak imbas moden sempurna, dan pemilih semu baru digunakan secara meluas dalam persekitaran pengeluaran. Sekiranya anda memerlukan sokongan penyemak imbas yang lebih lama, baik polyfill untuk IE, atau gunakan pemilih ini dengan cara yang tidak kritikal á la peningkatan progresif, yang disyorkan.