Saya tahu bahwa tidak ada pemilih induk CSS , tetapi apakah mungkin untuk menata elemen pengasuhan saat melayang elemen anak tanpa pemilih seperti itu?
Untuk memberikan contoh: pertimbangkan tombol hapus yang ketika diarahkan akan menyorot elemen yang akan dihapus:
<div>
<p>Lorem ipsum ...</p>
<button>Delete</button>
</div>
Dengan menggunakan CSS murni, bagaimana cara mengubah warna latar belakang bagian ini ketika mouse di atas tombol?
Jawaban:
Nah, pertanyaan ini ditanyakan berkali-kali sebelumnya, dan jawaban singkatnya adalah: Tidak dapat dilakukan dengan CSS murni. Ada dalam namanya: Cascading Style Sheets hanya mendukung gaya dalam arah cascading, bukan ke atas.
Tetapi dalam kebanyakan situasi di mana efek ini diinginkan, seperti dalam contoh yang diberikan, masih ada kemungkinan untuk menggunakan karakteristik kaskade ini untuk mencapai efek yang diinginkan. Pertimbangkan markup pseudo ini:
Triknya adalah memberi saudara kandung ukuran dan posisi yang sama seperti orang tua dan untuk gaya saudara kandung bukan orang tua. Ini akan terlihat seperti orang tua ditata!
Sekarang, bagaimana gaya saudara kandungnya?
Ketika anak itu melayang, orang tuanya juga, tetapi saudara kandungnya tidak. Hal yang sama berlaku untuk saudara kandung. Ini menyimpulkan dalam tiga jalur pemilih CSS yang mungkin untuk menata saudara:
Jalur yang berbeda ini memungkinkan beberapa kemungkinan bagus. Misalnya, melepaskan trik ini pada contoh dalam hasil pertanyaan dalam biola ini :
Jelas, dalam banyak kasus, trik ini tergantung pada penggunaan posisi absolut untuk memberi saudara kandung ukuran yang sama seperti orang tua, dan masih membiarkan anak muncul di dalam orang tua.
Kadang-kadang perlu untuk menggunakan jalur pemilih yang lebih berkualitas untuk memilih elemen tertentu, seperti yang ditunjukkan dalam biola ini yang mengimplementasikan trik beberapa kali dalam menu pohon. Cukup bagus kok.
sumber
Saya tahu ini adalah pertanyaan lama, tapi saya berhasil melakukannya tanpa anak semu (tapi pembungkus semu).
Jika Anda mengatur orang tua menjadi tanpa
pointer-events
, dan kemudian anakdiv
denganpointer-events
set keauto
, itu berfungsi :)Perhatikan bahwa
<img>
tag (misalnya) tidak melakukan trik.Juga ingat untuk mengatur
pointer-events
untukauto
anak-anak lain yang memiliki pendengar acara mereka sendiri, atau jika tidak mereka akan kehilangan fungsi klik mereka.Sunting:
Seperti yang dikatakan oleh Shadow Wizard : perlu disebutkan ini tidak akan bekerja untuk IE10 dan di bawah ini. (FF dan Chrome versi lama juga, lihat di sini )
sumber
Pendekatan lain yang lebih sederhana (untuk pertanyaan lama) ..
adalah menempatkan elemen sebagai saudara kandung dan menggunakan:
Selektor Adjacent Adjacent (
+
) atau Seluler Adven Sibling (~
)Demo Fiddle di sini .
sumber
tidak ada pemilih CSS untuk memilih induk dari anak yang dipilih.
Anda bisa melakukannya dengan JavaScript
sumber
Seperti disebutkan sebelumnya "tidak ada pemilih CSS untuk memilih orang tua dari anak yang dipilih".
Jadi kamu juga:
Berikut adalah contoh untuk javascript / jQuery solusi
Di sisi javascript:
Dan di sisi CSS, Anda akan memiliki sesuatu seperti ini:
sumber
Solusi ini sepenuhnya tergantung pada desain, tetapi jika Anda memiliki div induk yang Anda ingin mengubah latar belakang ketika melayang-layang anak Anda dapat mencoba untuk meniru orangtua dengan
::after
/::before
.CSS:
Lihat contoh biola lengkap di sini
sumber
Solusi jquery sederhana bagi mereka yang tidak membutuhkan solusi css murni:
sumber
Ini sangat mudah dilakukan di Sass! Jangan mempelajari JavaScript untuk ini. Pemilih & di sass melakukan hal ini.
http://thesassway.com/intermediate/referencing-parent-selectors-using-ampersand
sumber