Sudah lama menjadi impian para pengembang front-end untuk memiliki cara menerapkan CSS ke elemen berdasarkan apa yang terjadi di dalam elemen tersebut Show
Mungkin kita ingin menerapkan satu tata letak ke elemen artikel jika ada gambar pahlawan di bagian atas, dan tata letak yang berbeda jika tidak ada gambar pahlawan. Atau mungkin kami ingin menerapkan gaya yang berbeda ke formulir tergantung pada status salah satu kolom inputnya. Bagaimana dengan memberi sidebar satu warna latar belakang jika ada komponen tertentu di sidebar itu, dan warna latar berbeda jika komponen itu tidak ada? Selama dua puluh tahun terakhir, Kelompok Kerja CSS membahas kemungkinan itu berkali-kali. Kebutuhannya jelas dan dipahami dengan baik. Mendefinisikan sintaks adalah tugas yang bisa dilakukan. Tetapi mencari tahu bagaimana mesin browser dapat menangani pola lingkaran yang berpotensi sangat kompleks, dan menyelesaikan perhitungan dengan cukup cepat sepertinya tidak mungkin. Versi awal pemilih induk dirancang untuk CSS3, hanya untuk ditangguhkan. Akhirnya, pseudo-class _7 secara resmi ditetapkan. Tetapi memiliki standar web saja tidak membuat 7 menjadi kenyataan. Kami masih membutuhkan tim browser untuk mengetahui tantangan kinerja yang sebenarnya. Sementara itu, komputer terus menjadi lebih kuat dan lebih cepat dari tahun ke tahunPada tahun 2021, Igalia mulai mengadvokasi 7 di antara tim pembuat browser, membuat prototipe ide mereka, dan mendokumentasikan temuan mereka terkait performa. Perhatian baru pada _7 menarik perhatian para insinyur yang mengerjakan WebKit di Apple. Kami mulai menerapkan kelas semu, memikirkan kemungkinan peningkatan kinerja yang diperlukan untuk membuat ini berfungsi. Kami memperdebatkan apakah akan memulai dengan versi yang lebih cepat dengan cakupan yang sangat terbatas dan sempit dari apa yang dapat dilakukannya, lalu mencoba menghapus batasan tersebut jika memungkinkan… atau memulai dengan sesuatu yang tidak memiliki batasan, dan hanya menerapkan batasan sesuai kebutuhan. Kami melakukannya, dan menerapkan versi yang lebih kuat. Kami mengembangkan sejumlah pengoptimalan caching dan pemfilteran khusus _1 baru, dan memanfaatkan strategi pengoptimalan lanjutan yang ada dari mesin CSS kami. Dan pendekatan kami berhasil, membuktikan bahwa setelah dua dekade menunggu, akhirnya mungkin untuk mengimplementasikan pemilih seperti itu dengan kinerja yang fantastis, bahkan dengan adanya pohon DOM besar dan sejumlah besar 7 pemilihTim WebKit mengirimkan _7 di Safari Technology Preview 137 pada Desember 2021, dan di Safari 15. 4 pada 14 Maret 2022. Igalia melakukan pekerjaan teknis untuk mengimplementasikan 7 di Chromium, yang akan dikirimkan di Chrome 105 pada 30 Agustus 2022. Agaknya browser lain yang dibangun di atas Chromium tidak akan jauh ketinggalan. Mozilla saat ini sedang mengerjakan implementasi FirefoxJadi, mari kita lihat langkah demi langkah apa yang dapat dilakukan pengembang web dengan alat ini. Ternyata, kelas semu _7 bukan hanya "pemilih orang tua". Setelah beberapa dekade jalan buntu, pemilih ini dapat melakukan lebih banyak lagiDasar-dasar cara menggunakan. has() sebagai pemilih indukMari kita mulai dengan dasar-dasarnya. Bayangkan kita ingin menata elemen _6 berdasarkan jenis konten pada gambar. Terkadang sosok kita hanya membungkus sebuah gambar
Sementara di lain waktu ada gambar dengan keterangan
Sekarang mari terapkan beberapa gaya ke 7 yang hanya akan diterapkan jika ada 8 di dalam gambar
Pemilih ini berarti apa yang dikatakan — elemen 7 yang memiliki 8 di dalamnya akan dipilihIni demonya, jika Anda ingin mengubah kode dan lihat apa yang terjadi. Pastikan untuk menggunakan browser yang mendukung 7 — mulai hari ini, itu adalah SafariLihat Pena Dalam demo ini, saya juga menargetkan _7 yang berisi elemen 3 dengan menggunakan 4 _Dan saya menggunakan Kueri Fitur Pemilih untuk menyembunyikan pengingat tentang dukungan browser setiap kali browser saat ini mendukung 7
Aturan _6 itu sendiri didukung dengan sangat baik. Ini bisa sangat berguna kapan pun Anda ingin menggunakan kueri fitur untuk menguji dukungan browser dari pemilih tertentuDan terakhir, di demo pertama ini, saya juga menulis pemilih kompleks menggunakan 7. Saya ingin menerapkan _8 pada gambar — tetapi hanya jika gambar adalah satu-satunya konten. Flexbox membuat gambar membentang untuk mengisi semua ruang yang tersediaSaya menggunakan pemilih untuk menargetkan _7 yang tidak memiliki elemen apa pun yang bukan gambar. Jika _7 memiliki 8, 3, 3, atau 4 — atau elemen apa pun selain 5 — maka pemilih tidak berlaku
7 adalah hal yang kuatContoh praktis menggunakan. has() dengan CSS GridMari kita lihat demo kedua di mana saya menggunakan 7 sebagai pemilih induk untuk menyelesaikan kebutuhan yang sangat praktis dengan mudahSaya memiliki beberapa kartu penggoda artikel yang ditata menggunakan CSS Grid. Beberapa kartu hanya berisi judul dan teks, sementara yang lain juga memiliki gambar. Saya ingin kartu dengan gambar mengambil lebih banyak ruang di kisi daripada kartu tanpa gambar Saya tidak ingin melakukan pekerjaan ekstra untuk membuat sistem manajemen konten saya menerapkan kelas atau menggunakan JavaScript untuk tata letak. Saya hanya ingin menulis pemilih sederhana di CSS yang akan memberi tahu browser untuk membuat kartu penggoda dengan gambar untuk mengambil dua baris dan dua kolom di kisi Kelas semu 7 membuat ini sederhana
Lihat Pena Dua demo pertama ini menggunakan pemilih elemen sederhana sejak awal CSS, tetapi semua pemilih dapat digabungkan dengan 7, termasuk pemilih kelas, pemilih ID, pemilih atribut — dan penggabung yang kuatMenggunakan. has() dengan penggabung anakPertama, tinjauan singkat tentang perbedaan antara dan ( 0)Penggabung turunan sudah ada sejak awal CSS. Itu adalah nama yang bagus ketika kita memberi spasi di antara dua penyeleksi sederhana. Seperti ini
Ini menargetkan semua 5 elemen yang terkandung dalam elemen 2, tidak peduli seberapa jauh jarak 2 dan 5 berada di pohon DOM HTML
Penggabung anak adalah nama saat kita meletakkan 0 di antara dua pemilih — yang memberi tahu browser untuk menargetkan apa pun yang cocok dengan pemilih kedua, tetapi hanya jika pemilih kedua adalah anak langsung dari yang pertama
Misalnya, pemilih ini menargetkan semua elemen _5 yang dibungkus oleh elemen 2, tetapi hanya jika 5 tepat setelah 2 di HTML _0Dengan mengingat hal itu, mari pertimbangkan perbedaan antara dua contoh berikut. Keduanya memilih elemen 2, bukan 5, karena kita menggunakan 7 1 2Yang pertama memilih elemen _2 dengan 5 di dalamnya — setiap tempat dalam struktur HTML. Sedangkan yang kedua memilih elemen hanya jika 5 adalah anak langsung dari 2Keduanya bisa bermanfaat; Lihat Pena Ada dua jenis penggabung tambahan — keduanya bersaudara. Dan melalui inilah _7 menjadi lebih dari sekadar pemilih orang tuaMenggunakan. has() dengan kombinator saudaraMari kita tinjau dua penyeleksi dengan hubungan saudara kandung. Ada ( _8) dan ( 9)Penggabung saudara berikutnya ( 8) hanya memilih paragraf yang datang langsung setelah elemen 1________11 _11_______4Penggabung saudara berikutnya ( 9) memilih semua paragraf yang muncul setelah elemen 1. Mereka harus bersaudara, tetapi bisa ada sejumlah elemen HTML lain di antaranya 5 6Perhatikan bahwa 4 dan 5 memilih elemen paragraf, dan bukan 1 judul. Seperti pemilih lainnya (pikirkan 7), ini adalah elemen terakhir yang terdaftar yang ditargetkan oleh pemilih. Tapi bagaimana jika kita ingin menargetkan 1? Seberapa sering Anda ingin menyesuaikan margin pada judul berdasarkan elemen yang mengikutinya? . Kode ini memungkinkan kita untuk memilih 1 dengan 3 segera setelahnya _7Luar biasa Bagaimana jika kita ingin melakukan ini untuk keenam elemen judul, tanpa menuliskan enam salinan pemilih. Kita dapat menggunakan _2 untuk menyederhanakan kode kita _8Atau bagaimana jika kita ingin menulis kode ini untuk elemen lebih dari sekedar paragrapah? _9Menggabungkan 7 dengan , ( 0), ( 8), dan ( 9) membuka banyak kemungkinan. Tapi oh, ini masih baru permulaanMenata status formulir tanpa JSAda banyak pseudo-class fantastis yang bisa digunakan di dalam 7. Faktanya, ini merevolusi apa yang bisa dilakukan oleh kelas semu. Sebelumnya, pseudo-class hanya digunakan untuk menata elemen berdasarkan status khusus — atau menata salah satu anaknya. Sekarang, pseudo-class dapat digunakan untuk menangkap status, tanpa JavaScript, dan mengatur gaya apa pun di DOM berdasarkan status tersebutBidang input formulir menyediakan cara yang ampuh untuk menangkap keadaan seperti itu. Form-specific pseudo-classes include 8, 9, 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11 and 12Mari selesaikan salah satu kasus penggunaan yang saya jelaskan di pendahuluan — kebutuhan lama untuk memberi gaya pada label formulir berdasarkan status bidang input. Mari kita mulai dengan bentuk dasar 0Saya ingin menerapkan latar belakang ke seluruh formulir setiap kali salah satu bidang menjadi fokus _1Sekarang saya bisa menggunakan _13 sebagai gantinya, tetapi akan berperilaku seperti 14. Kelas semu _15 selalu menerapkan CSS setiap kali sebuah bidang menjadi fokus. Kelas semu _16 menyediakan cara yang andal untuk mendesain indikator fokus hanya ketika browser akan menggambarnya secara asli, menggunakan heuristik kompleks yang sama yang digunakan browser untuk menentukan apakah akan menerapkan cincin fokus atau tidakSekarang, bayangkan saya ingin menata bidang lain, bidang yang tidak fokus — mengubah warna teks label dan warna batas masukan. Sebelum _7, ini membutuhkan JavaScript. Sekarang kita bisa menggunakan CSS ini _2Apa yang pemilih itu katakan? . Dan ubah batas bidang input menjadi 19Anda dapat melihat kode ini beraksi di demo berikut dengan mengklik di dalam salah satu kolom teks. Latar belakang formulir berubah, seperti yang saya jelaskan sebelumnya. Dan warna batas label dan input bidang yang tidak fokus juga berubah Lihat Pena Dalam demo yang sama ini, saya juga ingin meningkatkan peringatan kepada pengguna ketika ada kesalahan dalam cara mereka mengisi formulir. Selama bertahun-tahun, kami dapat dengan mudah memberi kotak merah di sekitar input yang tidak valid dengan CSS ini _3Sekarang dengan _7, kita juga dapat mengubah teks label menjadi merah _4Anda dapat melihat hasilnya dengan mengetikkan sesuatu di bidang situs web atau email yang bukan URL atau alamat email lengkap. Keduanya tidak valid, sehingga keduanya akan memicu batas merah dan label merah, dengan "X" Beralih mode gelap tanpa JSDan terakhir, dalam demo yang sama ini saya menggunakan kotak centang untuk memungkinkan pengguna beralih antara tema terang dan gelap 5Saya telah menata kotak centang mode gelap menggunakan gaya khusus, tetapi masih terlihat seperti kotak centang. Dengan gaya yang lebih kompleks, saya bisa membuat toggle di CSS Dengan cara yang sama, saya dapat menggunakan menu pilihan untuk menyediakan beberapa tema bagi pengguna untuk situs saya _6Lihat Pena Setiap kali ada kesempatan untuk menggunakan CSS daripada JavaScript, saya akan menerimanya. Ini menghasilkan pengalaman yang lebih cepat dan situs web yang lebih kuat. JavaScript dapat melakukan hal-hal luar biasa, dan kita harus menggunakannya saat itu adalah alat yang tepat untuk pekerjaan itu. Tetapi jika kita dapat mencapai hasil yang sama hanya dalam HTML dan CSS, itu lebih baik Dan banyak lagiMelihat melalui pseudo-class lain, ada begitu banyak yang bisa digabungkan dengan 7. Bayangkan kemungkinan dengan 22, 23, 24, 25, 26, 27, 28, 29, ________11______3. Kelas pseudo 32 baru dipicu ketika 33 dalam keadaan terbuka. Dengan _34 Anda dapat mengatur gaya apa pun di DOM berdasarkan apakah 33 terbuka atau tertutupNamun, tidak semua pseudo-class saat ini didukung di dalam 7 di setiap browser, jadi cobalah kode Anda di beberapa browser. Saat ini kelas semu media dinamis tidak berfungsi — seperti 37, 38, 39, dll. Mereka mungkin bekerja dengan sangat baik di masa depan, jadi jika Anda membaca ini di masa depan, ujilah mereka. Selain itu, dukungan pembatalan formulir saat ini tidak ada dalam situasi spesifik tertentu, sehingga perubahan status dinamis ke kelas semu tersebut mungkin tidak diperbarui dengan 7Safari 16 akan menambahkan dukungan untuk _41 membuka kemungkinan menarik untuk menulis kode yang melihat fragmen URL saat ini yang cocok dengan ID elemen tertentu. Misalnya, jika pengguna mengklik daftar isi di bagian atas dokumen, dan melompat ke bawah ke bagian halaman yang cocok dengan tautan tersebut, 42 menyediakan cara untuk menata konten tersebut secara unik, berdasarkan fakta bahwa pengguna mengklik . Dan _7 membuka apa yang bisa dilakukan gaya seperti ituSesuatu yang perlu diperhatikan — Kelompok Kerja CSS memutuskan untuk melarang semua elemen semu yang ada di dalam 7. Misalnya, 45 dan ________11______46 tidak akan berfungsi. Sama dengan _47 dan 48Itu. memiliki() revolusiIni terasa seperti revolusi dalam cara kita menulis pemilih CSS, membuka dunia kemungkinan yang sebelumnya tidak mungkin atau seringkali tidak sepadan dengan usaha. Rasanya sementara kita mungkin langsung mengenali betapa bergunanya 7 nanti, kita juga tidak tahu apa yang benar-benar mungkin. Selama beberapa tahun ke depan, orang-orang yang membuat demo dan mendalami apa yang dapat dilakukan CSS akan menghasilkan ide-ide luar biasa, memperluas 7 hingga batasnyaMichelle Barker membuat demo fantastis yang memicu animasi ukuran trek Grid melalui penggunaan 7 dan hover status. Baca lebih lanjut tentang itu di posting blognya. Dukungan untuk trek kisi animasi akan dikirimkan di Safari 16. Anda dapat mencoba demo ini hari ini di Pratinjau Teknologi Safari atau Safari 16 betaBagian tersulit dari _7 adalah membuka pikiran kita terhadap kemungkinannya. Kami sudah terbiasa dengan batasan yang dikenakan pada kami dengan tidak memiliki pemilih orang tua. Sekarang, kita harus menghentikan kebiasaan ituItulah lebih banyak alasan untuk menggunakan vanilla CSS, dan tidak membatasi diri Anda pada kelas yang ditentukan dalam kerangka kerja. Dengan menulis CSS Anda sendiri, khusus untuk proyek Anda, Anda dapat sepenuhnya memanfaatkan semua kemampuan hebat dari browser saat ini Apa yang akan Anda gunakan untuk 7? . Saya tidak sabar untuk melihat milik Anda
Bagaimana cara menerapkan CSS pada orang tua yang memiliki anak?Menerapkan gaya ke elemen turunan itu mudah, tetapi jika Anda ingin menerapkan gaya ke kelas induk yang sudah memiliki elemen turunan, Anda dapat menggunakan kombinator anak pemilih CSS ( . Misalnya, div > p memilih semua elemen . For example, div > p selects all elements where the parent is a element.
Bagaimana cara memilih elemen induk dari anak di CSS?Elemen>pemilih elemen digunakan untuk memilih elemen dengan induk tertentu. Catatan. Elemen yang bukan anak langsung dari induk yang ditentukan, tidak dipilih.
Bagaimana Anda menambahkan gaya ke elemen induk saat mengarahkan elemen anak?Pertama, gaya elemen . Setel posisi ke "relatif" Add :hover to the tag and specify the background property.. Set :hover and padding-bottom to the element inside the tag. .. . Set the position to “absolute” and specify the bottom for the
Apa itu pemilih orang tua/anak?Pemilih ("parent > child") memilih semua elemen yang merupakan turunan langsung dari elemen yang ditentukan . |