pamiętaj, że: hover nie będzie działał w ten sam sposób na ekranach dotykowych iw tych dniach należy go używać ostrożnie (np. unikaj wyświetlania dodatkowych elementów nawigacyjnych)
w odpowiedzi na mój ostatni komentarz, zobacz także przydatne odmiany w odpowiedzi na komentarz, którą zrobiłem w tym poście na blogu: zoomicon.wordpress.com/2017/11/25/…
HTML5 pozwala elementom zakotwiczenia zawijać prawie wszystko, więc w takim przypadku divelement może stać się dzieckiem elementu zakotwiczenia. W przeciwnym razie zasada jest taka sama - użyj :hoverpseudoklasy, aby zmienić displaywłaściwość innego elementu.
fajne rozwiązanie, nawet jeśli wstawisz div: hover {display: block;}, to div nie ukryje się, gdy najedziesz na siebie div ..
Alper
22
Spowoduje to, że każdy <div>na stronie, display:nonea gdy mysz znajdzie się nad „Najedź na mnie!” sprawi, że każdy <div>podążający za nim stanie się <a>tym samym rodzicem display:block. Lepszym rozwiązaniem może być wybór według .class-namelub według #id. W przeciwnym razie dobry post.
Nate
10
dodaj div: hover {display: block; }, aby trzymać go z daleka, gdy mysz jest nad nim
domek dla małp
Rozsądne może być użycie widoczności zamiast wyświetlania. O ile pamiętam, jest bardziej wydajny, ponieważ display za każdym razem przerysowuje div. Chociaż prawdopodobnie nie ma to znaczenia dla jednego diva, jeśli musisz zrobić wiele, lepiej zamiast tego uczynić ich niewidocznymi.
Ponieważ ta odpowiedź jest popularna, myślę, że potrzebne jest małe wyjaśnienie. Zastosowanie tej metody po najechaniu wskaźnikiem na element wewnętrzny nie zniknie. Ponieważ .showme jest w środku .showhim, nie zniknie po przesunięciu myszy między dwiema liniami tekstu (lub czymkolwiek innym).
Są to przykłady dziwactw, o które należy zadbać, wdrażając takie zachowanie.
Wszystko zależy od tego, czego potrzebujesz. Ta metoda jest lepsza w scenariuszu stylu menu, natomiast Yi Jiang jest lepsza w przypadku podpowiedzi.
Nie możesz mieć elementu blokującego wewnątrz elementu wbudowanego, chyba że używasz HTML 5.
metyl
3
HTML5 nie jest jeszcze standardem, więc metoda Yi Jianga jest lepsza.
metyl
4
wiem, że jest lepiej, dlatego głosowałem na niego :) podałem działający przykład, przedstawiając koncepcję (bardziej szczegółowo selektory css), nie rozumiem, dlaczego to przegłosuj ^^
n00b
Może lepiej użyć <span>s, ale myślę, że to lepszy przykład niż Yi Jiang.
Nate
37
Zauważyłem, że użycie krycia jest lepsze, pozwala dodawać przejścia css3, aby uzyskać ładny efekt zakończenia najechania. Przejścia zostaną po prostu porzucone przez starsze przeglądarki IE, więc z wdziękiem ulegną degradacji.
#stuff {opacity:0.0;-webkit-transition: all 500ms ease-in-out;-moz-transition: all 500ms ease-in-out;-ms-transition: all 500ms ease-in-out;-o-transition: all 500ms ease-in-out;transition: all 500ms ease-in-out;}#hover {width:80px;height:20px;background-color:green;margin-bottom:15px;}#hover:hover +#stuff {opacity:1.0;}
To wspaniale, użyłem tego dla znacznie większej div. Chciałem, aby div „stuff” pozostał widoczny, jeśli przesunąłem kursor z div „hover” do div „stuff”, więc zmieniłem ostatni element stylu z #hover:hover + #stuff {na #hover:hover + #stuff, #stuff:hover {. Wtedy div „rzeczy” pozostaje widoczny, gdy przejdziesz przez tę div!
NotJay,
26
Wiem, że jestem ekspertem, ale jestem niesamowicie dumny z siebie, że opracowałem coś na temat tego kodu. Jeśli zrobisz:
div {
display: none;}
a:hover > div {
display: block;}
(Zwróć uwagę na „>”). Możesz umieścić całość w tagu, tak długo, jak długo twój wyzwalacz (który może być w swoim div, lub prosto w tagu lub cokolwiek chcesz) fizycznie się dotyka ujawniony div, możesz przenosić mysz z jednego na drugi.
Może nie przydaje się to zbytnio, ale musiałem ustawić mój ujawniony div na przepełnienie: auto, więc czasami miał paski przewijania, których nie można było użyć, gdy tylko odejdziesz od div.
W rzeczywistości, po tym, jak w końcu opracowałem sposób na ujawnienie div, (chociaż jest to teraz dziecko wyzwalacza, a nie rodzeństwo), usiądź za wyzwalaczem, pod względem indeksu Z, (z niewielką pomocą tej strony : Jak sprawić, by element nadrzędny pojawił się nad dzieckiem ), nie musisz nawet przewracać odkrytego div, aby go przewinąć, po prostu zatrzymaj kursor nad spustem i użyj koła lub cokolwiek innego.
Mój ujawniony div obejmuje większość strony, więc ta technika sprawia, że jest ona o wiele bardziej trwała, niż ekran miga z jednego stanu do drugiego przy każdym ruchu myszy. To jest naprawdę intuicyjne, dlatego jestem z siebie bardzo dumny.
Jedynym minusem jest to, że nie można umieszczać linków w całej rzeczy, ale można użyć całej rzeczy jako jednego dużego linku.
<aclass="hoverable">Hover over me!</a><divclass="show-on-hover">I'm a block element.</div><hr/><aclass="hoverable">Hover over me also!</a><spanclass="show-on-hover">I'm an inline element.</span>
Chciałbym zaoferować to szablonowe rozwiązanie ogólnego przeznaczenia, które rozwija prawidłowe rozwiązanie dostarczone przez Yi Jiang's.
Dodatkowe korzyści obejmują:
obsługa najechania kursorem na dowolny typ elementu lub wiele elementów;
popup może być dowolnym typem elementu lub zestawem elementów, w tym obiektami;
kod samokontrujący;
zapewnia wyświetlanie wyskakującego okienka nad innymi elementami;
solidna podstawa do naśladowania, jeśli generujesz kod HTML z bazy danych.
W html umieszczasz następującą strukturę:
<divclass="information_popup_container"><divclass="information"><!-- The thing or things you want to hover over go here such as images, tables,
paragraphs, objects other divisions etc. --></div><divclass="popup_information"><!-- The thing or things you want to popup go here such as images, tables,
paragraphs, objects other divisions etc. --></div></div>
W css umieszczasz następującą strukturę:
div.information_popup_container {
position: absolute;
width:0px;
height:0px;/* Position Information *//* Appearance Information */}
div.information_popup_container > div.information {/* Position Information *//* Appearance Information */}
div.information_popup_container > div.popup_information {
position:fixed;
visibility: hidden;/* Position Information *//* Appearance Information */}
div.information_popup_container > div.information:hover + div.popup_information {
visibility: visible;
z-index:200;}
Należy zwrócić uwagę na kilka punktów:
Ponieważ pozycja div.popup jest ustawiona na stałą (działałaby również z wartością bezwzględną), zawartość nie mieści się w normalnym przepływie dokumentu, co pozwala na poprawne działanie widocznego atrybutu.
Z-index jest ustawiony tak, aby div.popup pojawił się nad innymi elementami strony.
Information_popup_container jest ustawiony na mały rozmiar i dlatego nie można go przesuwać.
Ten kod obsługuje tylko najechanie kursorem na element div.information. Aby wesprzeć najechanie kursorem na div.information i div.popup, zobacz poniżej „Najedź kursorem na okienko wyskakujące”.
Został przetestowany i działa zgodnie z oczekiwaniami w przeglądarce Opera 12.16 Internet Explorer 10.0.9200, Firefox 18.0 i Google Chrome 28.0.15.
Najedź kursorem na wyskakujące okienko
Jako dodatkowe informacje. Gdy wyskakujące okienko zawiera informacje, które możesz chcieć wyciąć i wkleić lub zawiera obiekt, z którym możesz chcieć wchodzić w interakcje, a następnie najpierw zamień:
Po drugie, dostosuj pozycję div.popup, tak aby zachodziło na nią nakładanie się informacji div. Kilka pikseli wystarcza, aby upewnić się, że div.popup może odbierać kursor podczas odsuwania wskaźnika od informacji div.in.
Nie działa to zgodnie z oczekiwaniami w przeglądarce Internet Explorer 10.0.9200 i działa zgodnie z oczekiwaniami w przeglądarce Opera 12.16, Firefox 18.0 i Google Chrome 28.0.15.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><styletype="text/css">
div
{display:none;color:black
width:100px;height:100px;background:white;animation:myfirst 9s;-moz-animation:myfirst 9s;/* Firefox */-webkit-animation:myfirst 5s;/* Safari and Chrome */}@keyframes myfirst
{0%{background:blue;}25%{background:yellow;}50%{background:blue;}100%{background:green;}}@-moz-keyframes myfirst /* Firefox */{0%{background:white;}50%{background:blue;}100%{background:green;}}@-webkit-keyframes myfirst /* Safari and Chrome */{0%{background:red;}25%{background:yellow;}50%{background:blue;}100%{background:green;}}a:hover + div{display:inline;}</style></head><body><ahref="#">Hover over me!</a><div>the color is changing now</div><div></div></body></html>
+Allow „wybierz” tylko pierwszy nie zagnieżdżonego elementu, gdy >tylko wybrać elementy zagnieżdżone - lepsze jest użycie ~, które pozwalają wybrać dowolny element, który ma dziecko z rodzicem unosił element. Używając krycia / szerokości i przejścia możesz zapewnić płynny wygląd
div {transition: all 1s}.ccc,.ggg {opacity:0;color: red}.ccc {height:0}.aaa:hover ~.bbb .ccc {opacity:1;height:34px}.aaa:hover ~.eee .fff .ggg {opacity:1}
<divclass="aaa">Hover me... to see<br><br></div><divclass='bbb'>BBBBB
<divclass='ccc'>CCCCC
<divclass='ddd'>DDDDD</div></div></div><divclass='eee'>EEEEE
<divclass='fff'>FFFFF
<divclass='ggg'>GGGGG</div><divclass='hhh'>HHHHH</div></div></div>
Dla mnie, jeśli chcę wchodzić w interakcję z ukrytym divem, nie widząc, jak znika za każdym razem, gdy opuszczam element wyzwalający (w tym przypadku), muszę dodać:
, spowodowało to, że rozwija się przy użyciu drugiego, ale nie rozwija się przy użyciu pierwszego. Jeśli więc istnieje div między celem aktywowania a ukrytym div, to nie zadziała.
<divclass="product-card-sales-container brand-sales"><divclass="product-card-">Message from the business goes here. They can talk alot or not</div></div>
Odpowiedzi:
Można zrobić coś jak to :
Korzysta z sąsiedniego selektora rodzeństwa i jest podstawą menu rozwijanego suckerfish .
HTML5 pozwala elementom zakotwiczenia zawijać prawie wszystko, więc w takim przypadku
div
element może stać się dzieckiem elementu zakotwiczenia. W przeciwnym razie zasada jest taka sama - użyj:hover
pseudoklasy, aby zmienićdisplay
właściwość innego elementu.źródło
<div>
na stronie,display:none
a gdy mysz znajdzie się nad „Najedź na mnie!” sprawi, że każdy<div>
podążający za nim stanie się<a>
tym samym rodzicemdisplay:block
. Lepszym rozwiązaniem może być wybór według.class-name
lub według#id
. W przeciwnym razie dobry post.jsfiddle
Ponieważ ta odpowiedź jest popularna, myślę, że potrzebne jest małe wyjaśnienie. Zastosowanie tej metody po najechaniu wskaźnikiem na element wewnętrzny nie zniknie. Ponieważ .showme jest w środku .showhim, nie zniknie po przesunięciu myszy między dwiema liniami tekstu (lub czymkolwiek innym).
Są to przykłady dziwactw, o które należy zadbać, wdrażając takie zachowanie.
Wszystko zależy od tego, czego potrzebujesz. Ta metoda jest lepsza w scenariuszu stylu menu, natomiast Yi Jiang jest lepsza w przypadku podpowiedzi.
źródło
<span>
s, ale myślę, że to lepszy przykład niż Yi Jiang.Zauważyłem, że użycie krycia jest lepsze, pozwala dodawać przejścia css3, aby uzyskać ładny efekt zakończenia najechania. Przejścia zostaną po prostu porzucone przez starsze przeglądarki IE, więc z wdziękiem ulegną degradacji.
źródło
#hover:hover + #stuff {
na#hover:hover + #stuff, #stuff:hover {
. Wtedy div „rzeczy” pozostaje widoczny, gdy przejdziesz przez tę div!Wiem, że jestem ekspertem, ale jestem niesamowicie dumny z siebie, że opracowałem coś na temat tego kodu. Jeśli zrobisz:
(Zwróć uwagę na „>”). Możesz umieścić całość w tagu, tak długo, jak długo twój wyzwalacz (który może być w swoim div, lub prosto w tagu lub cokolwiek chcesz) fizycznie się dotyka ujawniony div, możesz przenosić mysz z jednego na drugi.
Może nie przydaje się to zbytnio, ale musiałem ustawić mój ujawniony div na przepełnienie: auto, więc czasami miał paski przewijania, których nie można było użyć, gdy tylko odejdziesz od div.
W rzeczywistości, po tym, jak w końcu opracowałem sposób na ujawnienie div, (chociaż jest to teraz dziecko wyzwalacza, a nie rodzeństwo), usiądź za wyzwalaczem, pod względem indeksu Z, (z niewielką pomocą tej strony : Jak sprawić, by element nadrzędny pojawił się nad dzieckiem ), nie musisz nawet przewracać odkrytego div, aby go przewinąć, po prostu zatrzymaj kursor nad spustem i użyj koła lub cokolwiek innego.
Mój ujawniony div obejmuje większość strony, więc ta technika sprawia, że jest ona o wiele bardziej trwała, niż ekran miga z jednego stanu do drugiego przy każdym ruchu myszy. To jest naprawdę intuicyjne, dlatego jestem z siebie bardzo dumny.
Jedynym minusem jest to, że nie można umieszczać linków w całej rzeczy, ale można użyć całej rzeczy jako jednego dużego linku.
źródło
Ta odpowiedź nie wymaga znajomości typu wyświetlacza (wbudowany itp.), Który powinien być ukryty podczas wyświetlania:
Używa to sąsiedniego selektora rodzeństwa i selektora nie .
źródło
Chciałbym zaoferować to szablonowe rozwiązanie ogólnego przeznaczenia, które rozwija prawidłowe rozwiązanie dostarczone przez Yi Jiang's.
Dodatkowe korzyści obejmują:
W html umieszczasz następującą strukturę:
W css umieszczasz następującą strukturę:
Należy zwrócić uwagę na kilka punktów:
Najedź kursorem na wyskakujące okienko
Jako dodatkowe informacje. Gdy wyskakujące okienko zawiera informacje, które możesz chcieć wyciąć i wkleić lub zawiera obiekt, z którym możesz chcieć wchodzić w interakcje, a następnie najpierw zamień:
z
Po drugie, dostosuj pozycję div.popup, tak aby zachodziło na nią nakładanie się informacji div. Kilka pikseli wystarcza, aby upewnić się, że div.popup może odbierać kursor podczas odsuwania wskaźnika od informacji div.in.
Nie działa to zgodnie z oczekiwaniami w przeglądarce Internet Explorer 10.0.9200 i działa zgodnie z oczekiwaniami w przeglądarce Opera 12.16, Firefox 18.0 i Google Chrome 28.0.15.
Zobacz fiddle http://jsfiddle.net/F68Le/, aby uzyskać pełny przykład z wyskakującym menu wielopoziomowym.
źródło
przetestuj ten kod
źródło
+
Allow „wybierz” tylko pierwszy nie zagnieżdżonego elementu, gdy>
tylko wybrać elementy zagnieżdżone - lepsze jest użycie~
, które pozwalają wybrać dowolny element, który ma dziecko z rodzicem unosił element. Używając krycia / szerokości i przejścia możesz zapewnić płynny wyglądźródło
Dla mnie, jeśli chcę wchodzić w interakcję z ukrytym divem, nie widząc, jak znika za każdym razem, gdy opuszczam element wyzwalający (w tym przypadku), muszę dodać:
źródło
W oparciu o główną odpowiedź jest to przykład przydatny do wyświetlenia podpowiedzi informacyjnej po kliknięciu w
?
pobliżu linku:źródło
Z moich testów przy użyciu tego CSS:
A ten HTML:
, spowodowało to, że rozwija się przy użyciu drugiego, ale nie rozwija się przy użyciu pierwszego. Jeśli więc istnieje div między celem aktywowania a ukrytym div, to nie zadziała.
źródło
HTML
CSS
CodePen: najedź kursorem na div, pokaż tekst w innym div
źródło
Nie zapomnij jeśli próbujesz najechać myszką na obraz, musisz go umieścić wokół kontenera. css:
Jeśli najedziesz na to:
To pokaże:
źródło