Saya mungkin menjawab pertanyaan saya sendiri, tetapi saya sangat ingin tahu.
Saya tahu bahwa CSS dapat memilih masing-masing anak dari orang tua, tetapi adakah dukungan untuk menata anak-anak dari sebuah wadah, jika orang tuanya memiliki jumlah anak tertentu.
sebagai contoh
container:children(8) {
// style the parent this way if there are 8 children
}
Saya tahu kedengarannya aneh, tetapi manajer saya meminta saya untuk memeriksanya, belum menemukan apa pun pada saya jadi saya memutuskan untuk beralih ke SO sebelum mengakhiri pencarian.
css
css-selectors
Brodie
sumber
sumber
Jawaban:
Klarifikasi:
Karena ungkapan sebelumnya dalam pertanyaan awal, beberapa warga negara SO telah mengajukan kekhawatiran bahwa jawaban ini bisa menyesatkan. Perhatikan bahwa, di CSS3, gaya tidak dapat diterapkan ke simpul orangtua berdasarkan jumlah anak yang dimilikinya. Namun, gaya dapat diterapkan pada simpul anak-anak berdasarkan jumlah saudara kandung yang mereka miliki.
Jawaban asli:
Luar biasa, ini sekarang mungkin murni di CSS3.
Caranya adalah dengan memilih anak pertama saat itu juga anak ke-n dari anak terakhir. Ini secara efektif memilih berdasarkan jumlah saudara kandung.
Penghargaan untuk teknik ini jatuh ke André Luís (ditemukan) & Lea Verou (disempurnakan).
Apakah Anda tidak suka CSS3? 😄
Contoh CodePen:
Sumber:
sumber
:first-child:nth-last-child(1)
Anda juga dapat menggunakan:only-child
.Tidak. Yah, tidak juga. Ada beberapa penyeleksi yang bisa membuat Anda agak dekat, tetapi mungkin tidak akan berfungsi dalam contoh Anda dan tidak memiliki kompatibilitas browser terbaik.
:only-child
Ini
:only-child
adalah salah satu dari sedikit penyeleksi penghitungan sejati dalam arti bahwa itu hanya diterapkan ketika ada satu anak dari elemen induk. Menggunakan contoh ideal Anda, itu bertindak sepertichildren(1)
mungkin.:nth-child
Itu
:nth-child
pemilih mungkin benar-benar mendapatkan Anda di mana Anda ingin pergi tergantung pada apa yang Anda benar-benar ingin lakukan. Jika Anda ingin menata semua elemen jika ada 8 anak, Anda kurang beruntung. Namun, jika Anda ingin menerapkan gaya ke elemen ke-8 dan yang lebih baru, coba ini:Sayangnya, ini mungkin bukan solusi yang Anda cari. Pada akhirnya, Anda mungkin perlu menggunakan beberapa Javascript wizardry untuk menerapkan gaya berdasarkan hitungan - bahkan jika Anda akan menggunakan salah satu dari ini, Anda harus melihat keras kompatibilitas browser sebelum menggunakan murni Solusi CSS.
W3 CSS3 Spec pada pseudo-class
EDIT Saya membaca pertanyaan Anda sedikit berbeda - ada beberapa cara lain untuk gaya orang tua , bukan anak-anak. Biarkan saya melempar beberapa penyeleksi lain ke jalan Anda:
:empty
dan:not
Elemen gaya ini yang tidak memiliki anak. Tidak terlalu berguna sendiri, tetapi ketika dipasangkan dengan
:not
pemilih, Anda hanya dapat menata elemen yang memiliki anak:Anda tidak dapat menghitung berapa banyak anak yang tersedia dengan CSS murni di sini, tetapi itu adalah pemilih lain yang menarik yang memungkinkan Anda melakukan hal-hal keren.
sumber
CATATAN: Solusi ini akan mengembalikan anak-anak set dengan panjang tertentu, bukan elemen induk seperti yang Anda minta. Semoga bermanfaat.
Andre Luis datang dengan metode: http://lea.verou.me/2011/01/styling-children-based-on-their-number-with-css3/ Sayangnya, itu hanya bekerja di IE9 dan di atas.
Pada dasarnya, Anda menggabungkan: nth-child () dengan kelas pseudo lain yang berhubungan dengan posisi elemen. Pendekatan ini memungkinkan Anda menentukan elemen dari set elemen dengan panjang tertentu .
Misalnya
:nth-child(1):nth-last-child(3)
cocok dengan elemen pertama dalam set sementara juga menjadi elemen ke-3 dari akhir set. Ini melakukan dua hal: menjamin bahwa himpunan hanya memiliki tiga elemen dan bahwa kita memiliki yang pertama dari ketiganya. Untuk menentukan elemen kedua dari set elemen tiga, kami akan menggunakan:nth-child(2):nth-last-child(2)
.Contoh 1 - Pilih semua elemen daftar jika set memiliki tiga elemen:
Contoh 1 alternatif dari Lea Verou:
Contoh 2 - target elemen terakhir dari himpunan dengan tiga elemen daftar:
Alternatif contoh 2:
Contoh 3 - elemen target kedua set dengan empat elemen daftar:
sumber
li:nth-child(3):nth-last-child(1) { transform: rotate(120deg); } li:nth-child(2):nth-last-child(2) { transform: rotate(240deg); }
dan seterusnya ...Mengatasi solusi Matt, saya menggunakan implementasi Kompas / SCSS berikut.
Ini memungkinkan Anda untuk dengan cepat memperluas jumlah item.
sumber
ya kita bisa melakukan ini menggunakan nth-child seperti itu
Ini akan membuat div anak ke-8 dan seterusnya menjadi merah. Semoga ini membantu...
Juga, jika seseorang pernah mengatakan "hei, itu tidak bisa dilakukan dengan gaya menggunakan css, gunakan JS !!!" ragu mereka segera. CSS sangat fleksibel saat ini
Contoh :: http://jsfiddle.net/uWrLE/1/
Dalam contoh 7 anak pertama berwarna biru, kemudian 8 dan seterusnya berwarna merah ...
sumber
Jika Anda akan melakukannya dalam CSS murni (menggunakan scss) tetapi Anda memiliki elemen / kelas yang berbeda di dalam kelas induk yang sama Anda dapat menggunakan versi ini !!
sumber
Tidak, tidak ada yang seperti ini di CSS. Namun, Anda dapat menggunakan JavaScript untuk menghitung jumlah anak dan menerapkan gaya.
sumber