Ogromne podziękowania dla Mike'a i Robertca za ich pomocne posty!
Jeśli masz dwa elementy w swoim HTML i chcesz :hover
zmienić jeden z nich i zmienić styl na drugi, oba elementy muszą być bezpośrednio powiązane - rodzice, dzieci lub rodzeństwo. Oznacza to, że dwa elementy muszą znajdować się jeden w drugim lub oba muszą znajdować się w tym samym większym elemencie.
Chciałem wyświetlać definicje w polu po prawej stronie przeglądarki, gdy moi użytkownicy czytają moją witrynę i :hover
wyróżniają terminy; dlatego nie chciałem, aby element „definicja” był wyświetlany w elemencie „tekst”.
Prawie się poddałem i po prostu dodałem javascript do mojej strony, ale to jest przyszłość! Nie powinniśmy znosić tylnego sassa z CSS i HTML, który mówi nam, gdzie musimy umieścić nasze elementy, aby osiągnąć pożądane efekty! W końcu poszliśmy na kompromis.
Podczas gdy rzeczywiste elementy HTML w pliku muszą być zagnieżdżone lub zawarte w jednym elemencie, aby były :hover
dla siebie ważnymi celami, cssposition
atrybutu można używać do wyświetlania dowolnego elementu w dowolnym miejscu. Użyłem position: fixed, aby umieścić cel mojej :hover
akcji tam, gdzie chciałem, na ekranie użytkownika, niezależnie od jego lokalizacji w dokumencie HTML.
HTML:
<div id="explainBox" class="explainBox"> /*Common parent*/
<a class="defP" id="light" href="http://en.wikipedia.or/wiki/Light">Light /*highlighted term in text*/
</a> is as ubiquitous as it is mysterious. /*plain text*/
<div id="definitions"> /*Container for :hover-displayed definitions*/
<p class="def" id="light"> /*example definition entry*/ Light:
<br/>Short Answer: The type of energy you see
</p>
</div>
</div>
CSS:
/*read: "when user hovers over #light somewhere inside #explainBox
set display to inline-block for #light directly inside of #definitions.*/
#explainBox #light:hover~#definitions>#light {
display: inline-block;
}
.def {
display: none;
}
#definitions {
background-color: black;
position: fixed;
/*position attribute*/
top: 5em;
/*position attribute*/
right: 2em;
/*position attribute*/
width: 20em;
height: 30em;
border: 1px solid orange;
border-radius: 12px;
padding: 10px;
}
W tym przykładzie cel :hover
polecenia z elementu wewnątrz #explainBox
musi być #explainBox
albo w środku#explainBox
. Atrybuty pozycji przypisane do #definicji zmuszają go do pojawienia się w żądanej lokalizacji (na zewnątrz #explainBox
), nawet jeśli technicznie znajduje się w niepożądanej pozycji w dokumencie HTML.
Rozumiem, że używanie tego samego #id
do więcej niż jednego elementu HTML jest uważane za złą formę ; jednakże w tym przypadku przypadki #light
można opisać niezależnie ze względu na ich odpowiednie pozycje w unikatowych #id
elementach. Czy istnieje powód, aby id
#light
w tym przypadku nie powtarzać ?
~
dla „kostki jest gdzieś po kontenerze w DOM i dzieli rodzica”