Apa yang ingin saya lakukan adalah ketika seseorang div
melayang, itu akan mempengaruhi properti orang lain div
.
Sebagai contoh, dalam demo JSFiddle ini , ketika Anda mengarahkan kursor #cube
itu mengubahbackground-color
tetapi apa yang saya inginkan adalah ketika saya mengarahkan kursor #container
, #cube
terpengaruh.
div {
outline: 1px solid red;
}
#container {
width: 200px;
height: 30px;
}
#cube {
width: 30px;
height: 100%;
background-color: red;
}
#cube:hover {
width: 30px;
height: 100%;
background-color: blue;
}
<div id="container">
<div id="cube">
</div>
</div>
~
untuk 'cube adalah suatu tempat setelah wadah di DOM dan berbagi orang tua'#container
sebelah#cube
, yaitu#container
mengikuti#cube
?Dalam contoh khusus ini, Anda dapat menggunakan:
Contoh ini hanya berfungsi karena
cube
anakcontainer
. Untuk skenario yang lebih rumit, Anda harus menggunakan CSS yang berbeda, atau menggunakan JavaScript.sumber
Menggunakan pemilih saudara adalah solusi umum untuk menata elemen-elemen lain ketika melayang di atas elemen tertentu, tetapi hanya berfungsi jika elemen-elemen lain mengikuti elemen yang diberikan pada DOM . Apa yang bisa kita lakukan ketika elemen-elemen lain sebenarnya harus ada sebelum elemen yang melayang? Katakanlah kita ingin menerapkan widget peringkat bar sinyal seperti yang di bawah ini:
Ini benar-benar dapat dilakukan dengan mudah menggunakan model flexbox CSS, dengan mengatur
flex-direction
kereverse
, sehingga elemen ditampilkan dalam urutan yang berlawanan dari yang ada di DOM. Tangkapan layar di atas adalah dari widget seperti itu, diimplementasikan dengan CSS murni.Flexbox didukung dengan sangat baik oleh 95% browser modern.
Tampilkan cuplikan kode
sumber
.rating div
, hapus margin, dan tambahkanborder-right: 4px solid white;
Terima kasih banyak kepada Mike dan Robertc untuk posting bermanfaat mereka!
Jika Anda memiliki dua elemen dalam HTML Anda dan Anda ingin
:hover
lebih dari satu dan menargetkan perubahan gaya di yang lain, dua elemen harus terkait langsung - orang tua, anak-anak atau saudara kandung. Ini berarti bahwa kedua elemen harus satu di dalam yang lain atau keduanya harus terkandung dalam elemen yang lebih besar yang sama.Saya ingin menampilkan definisi dalam kotak di sisi kanan browser ketika pengguna saya membaca situs saya dan
:hover
lebih dari istilah yang disorot; oleh karena itu, saya tidak ingin elemen 'definisi' ditampilkan di dalam elemen 'teks'.Saya hampir menyerah dan baru saja menambahkan javascript ke halaman saya, tetapi ini adalah masa depan! Kita tidak harus memasang back sass dari CSS dan HTML memberitahu kita di mana kita harus meletakkan elemen kita untuk mencapai efek yang kita inginkan! Pada akhirnya kami berkompromi.
Sementara elemen HTML aktual dalam file harus bersarang atau terkandung dalam satu elemen untuk menjadi
:hover
target yang valid satu sama lain,position
atribut css dapat digunakan untuk menampilkan elemen apa pun di mana pun Anda inginkan. Saya menggunakan posisi: tetap untuk menempatkan target:hover
tindakan saya di tempat yang saya inginkan di layar pengguna terlepas dari lokasinya di dokumen HTML.Html:
Css:
Dalam contoh ini target
:hover
perintah dari elemen di dalam#explainBox
harus#explainBox
atau juga di dalam#explainBox
. Atribut posisi yang ditetapkan untuk #definisi memaksanya muncul di lokasi yang diinginkan (di luar#explainBox
) meskipun secara teknis terletak di posisi yang tidak diinginkan dalam dokumen HTML.Saya mengerti itu dianggap bentuk buruk untuk menggunakan yang sama
#id
untuk lebih dari satu elemen HTML; akan tetapi, dalam hal ini contoh-contoh#light
dapat dijelaskan secara independen karena posisi masing-masing dalam#id
elemen unik . Apakah ada alasan untuk tidak mengulangiid
#light
kasus ini?sumber
ID
beberapa kali yang sama . Cukup gunakan aclass
.Hanya ini yang berhasil untuk saya:
Di mana
.cube
CssClass dari#cube
.Diuji di Firefox , Chrome dan Edge .
sumber
Berikut adalah gagasan lain yang memungkinkan Anda untuk memengaruhi elemen lain tanpa mempertimbangkan pemilih tertentu dan hanya dengan menggunakan
:hover
status elemen utama.Untuk ini, saya akan mengandalkan penggunaan properti khusus (variabel CSS). Seperti yang dapat kita baca dalam spesifikasi :
Idenya adalah untuk mendefinisikan properti khusus dalam elemen utama dan menggunakannya untuk menata elemen anak dan karena properti ini diwariskan, kita hanya perlu mengubahnya di dalam elemen utama di hover.
Berikut ini sebuah contoh:
Mengapa ini bisa lebih baik daripada menggunakan pemilih tertentu yang dikombinasikan dengan hover?
Saya dapat memberikan setidaknya 2 alasan yang membuat metode ini bagus untuk dipertimbangkan:
border
,linear-gradient
,background-color
,box-shadow
dll Hal ini akan menghindari kita reseting semua sifat ini di hover.Ini adalah contoh yang lebih kompleks:
Seperti yang dapat kita lihat di atas, kita hanya perlu satu deklarasi CSS untuk mengubah banyak properti elemen yang berbeda.
sumber