Zeigen Sie div beim Bewegen des Mauszeigers über <a> an, indem Sie nur CSS verwenden
302
Ich möchte ein div anzeigen, wenn jemand über einem <a>Element schwebt , aber ich möchte dies in CSS und nicht in JavaScript tun. Wissen Sie, wie dies erreicht werden kann?
Denken Sie daran: Hover funktioniert auf Touchscreens nicht auf die gleiche Weise und sollte heutzutage mit Vorsicht verwendet werden (z. B. vermeiden, zusätzliche Navigationselemente anzuzeigen)
Nach meinem letzten Kommentar finden Sie auch einige nützliche Variationen in einer Kommentarantwort, die ich in diesem Blogbeitrag verfasst habe: zoomicon.wordpress.com/2017/11/25/…
Mit HTML5 können Ankerelemente fast alles umschließen. In diesem Fall kann das divElement dem Anker untergeordnet werden. Ansonsten ist das Prinzip dasselbe - verwenden Sie die :hoverPseudoklasse, um die displayEigenschaft eines anderen Elements zu ändern .
schöne Lösung, auch wenn Sie div: hover {display: block;} setzen, dann wird div nicht versteckt, wenn Sie div selbst schweben ..
Alper
22
Dies macht jeden <div>auf der Seite display:noneund wenn die Maus über "Schwebe über mir!" es wird jedes <div>folgende <a>innerhalb des gleichen Elternteils machen display:block. Es könnte eine bessere Idee sein, nach .class-nameoder nach auszuwählen #id. Ansonsten gute Post.
Nate
10
add div: hover {display: block; }, um es draußen zu halten, während ihre Maus darüber ist
Affenhaus
Es kann ratsam sein, die Sichtbarkeit anstelle der Anzeige zu verwenden. Soweit ich mich erinnere, ist es effizienter, da die Anzeige das Div jedes Mal neu zeichnet. Obwohl es für einen Div wahrscheinlich keine Rolle spielt, ist es möglicherweise besser, sie stattdessen unsichtbar zu machen, wenn Sie viele machen müssen.
Prinsig
@Yi Jiang - wie hast du diesen Code zur Antwort hinzugefügt?
Da diese Antwort beliebt ist, denke ich, dass eine kleine Erklärung erforderlich ist. Wenn Sie mit dieser Methode über das interne Element fahren, wird es nicht ausgeblendet. Da sich die .showme in .showhim befindet, verschwindet sie nicht, wenn Sie die Maus zwischen den beiden Textzeilen bewegen (oder was auch immer).
Dies sind Beispiele für Macken, auf die Sie bei der Implementierung eines solchen Verhaltens achten müssen.
Es hängt alles davon ab, wofür Sie das brauchen. Diese Methode eignet sich besser für ein Szenario im Menüstil, während die von Yi Jiang für QuickInfos besser geeignet ist.
Sie können kein Blockelement im Inline-Element haben, es sei denn, Sie verwenden HTML 5.
Methyl
3
HTML5 ist noch kein Standard, daher ist die Methode von Yi Jiang besser.
Methyl
4
Ich weiß, dass es besser ist, deshalb habe ich es positiv bewertet :) Ich gab ein funktionierendes Beispiel, präsentierte ein Konzept (CSS-Selektoren genauer), verstehe nicht, warum es abgelehnt wurde ^^
n00b
Es ist vielleicht besser, <span>s zu verwenden , aber ich denke, dies ist ein besseres Beispiel als das von Yi Jiang.
Nate
37
Ich fand, dass die Verwendung der Deckkraft besser ist. Sie können CSS3- Übergänge hinzufügen , um einen schönen fertigen Hover-Effekt zu erzielen. Die Übergänge werden nur von älteren IE-Browsern gelöscht, sodass sie sich ordnungsgemäß verschlechtern.
#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;}
Das ist großartig, ich habe dies für eine viel größere Div verwendet. Ich wollte, dass das "stuff" -Div sichtbar bleibt, wenn ich meinen Cursor vom "hover" -Div auf das "stuff" -Div bewege, also habe ich das letzte Stilelement von #hover:hover + #stuff {auf geändert #hover:hover + #stuff, #stuff:hover {. Dann bleibt das "Zeug" -Div sichtbar, wenn Sie sich über dieses Div bewegen!
NotJay
26
Ich bin auf jeden Fall ein Experte, aber ich bin unglaublich stolz auf mich, dass ich etwas über diesen Code herausgefunden habe. Wenn Sie tun:
div {
display: none;}
a:hover > div {
display: block;}
(Beachten Sie das '>') Sie können das Ganze in einem Tag enthalten, solange sich Ihr Trigger (der sich in einem eigenen Div oder direkt in einem Tag befindet oder etwas, das Sie möchten) physisch berührt Mit dem aufgedeckten Div können Sie Ihre Maus von einem zum anderen bewegen.
Vielleicht ist dies nicht sehr nützlich, aber ich musste mein offenbartes Div auf Überlauf einstellen: auto, daher hatte es manchmal Bildlaufleisten, die nicht verwendet werden konnten, sobald Sie sich vom Div entfernen.
Nachdem Sie endlich herausgefunden haben, wie Sie das aufgedeckte Div erstellen können (obwohl es jetzt ein Kind des Auslösers ist, kein Geschwister), setzen Sie sich in Bezug auf den Z-Index hinter den Auslöser (mit ein wenig Hilfe von dieser Seite : So wird ein übergeordnetes Element über dem untergeordneten Element angezeigt über das untergeordnete ) Sie müssen nicht einmal über das aufgedeckte Div rollen, um es zu scrollen. Bewegen Sie den Mauszeiger über den Auslöser und verwenden Sie Ihr Rad oder was auch immer.
Mein aufgedecktes Div deckt den größten Teil der Seite ab, daher macht diese Technik sie viel dauerhafter, anstatt dass der Bildschirm bei jeder Bewegung der Maus von einem Zustand in einen anderen blinkt. Es ist wirklich intuitiv, deshalb bin ich wirklich ziemlich stolz auf mich.
Der einzige Nachteil ist, dass Sie keine Links in das Ganze einfügen können, aber Sie können das Ganze als einen großen Link verwenden.
<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>
Ich möchte diese universelle Vorlagenlösung anbieten, die die korrekte Lösung von Yi Jiang erweitert.
Die zusätzlichen Vorteile umfassen:
Unterstützung für das Bewegen des Mauszeigers über einen beliebigen Elementtyp oder mehrere Elemente;
Das Popup kann ein beliebiger Elementtyp oder eine beliebige Gruppe von Elementen sein, einschließlich Objekten.
selbstdokumentierender Code;
stellt sicher, dass das Popup über den anderen Elementen angezeigt wird;
Eine solide Grundlage, die Sie befolgen sollten, wenn Sie HTML-Code aus einer Datenbank generieren.
Im HTML platzieren Sie die folgende 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>
In der CSS platzieren Sie die folgende 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;}
Einige Punkte zu beachten sind:
Da die Position von div.popup auf fest gesetzt ist (würde auch mit absolut funktionieren), befindet sich der Inhalt nicht im normalen Fluss des Dokuments, wodurch das sichtbare Attribut gut funktioniert.
Der Z-Index wird festgelegt, um sicherzustellen, dass das div.popup über den anderen Seitenelementen angezeigt wird.
Der information_popup_container ist klein eingestellt und kann daher nicht über den Mauszeiger bewegt werden.
Dieser Code unterstützt nur das Bewegen des Mauszeigers über das div.information-Element. Um das Bewegen des Mauszeigers über div.information und div.popup zu unterstützen, lesen Sie unten den Mauszeiger über das Popup.
Es wurde getestet und funktioniert wie erwartet in Opera 12.16 Internet Explorer 10.0.9200, Firefox 18.0 und Google Chrome 28.0.15.
Bewegen Sie den Mauszeiger über das Popup
Als zusätzliche Information. Wenn das Popup Informationen enthält, die Sie möglicherweise ausschneiden und einfügen möchten, oder ein Objekt enthält, mit dem Sie möglicherweise interagieren möchten, ersetzen Sie zuerst:
Und zweitens passen Sie die Position von div.popup so an, dass es eine Überlappung mit div.information gibt. Ein paar Pixel reichen aus, um sicherzustellen, dass das div.popup den Hover empfangen kann, wenn der Cusor von div.information wegbewegt wird.
Dies funktioniert nicht wie erwartet mit Internet Explorer 10.0.9200 und wie erwartet mit Opera 12.16, Firefox 18.0 und Google Chrome 28.0.15.
Siehe Geige http://jsfiddle.net/F68Le/ für ein komplettes Beispiel mit einem Popup - Menü mit mehreren Ebenen.
<!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>
Das +zulässige 'Auswahl' nur erstes nicht verschachteltes Element, das >Auswahl nur verschachtelte Elemente - desto besser ist es, ~das zu verwenden, um ein beliebiges Element auszuwählen, das dem übergeordneten schwebenden Element untergeordnet ist. Mit Deckkraft / Breite und Übergang können Sie ein glattes Erscheinungsbild erzielen
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>
Wenn ich mit dem versteckten Div interagieren möchte, ohne dass es jedes Mal verschwindet, wenn ich das auslösende Element verlasse (in diesem Fall a), muss ich Folgendes hinzufügen:
Basierend auf der Hauptantwort ist dies ein Beispiel, das nützlich ist, um einen Informationstooltip anzuzeigen, wenn Sie auf ?einen Link in der Nähe klicken :
Es ergab sich, dass es mit dem zweiten erweitert wird, aber nicht mit dem ersten. Wenn es also ein Div zwischen dem Schwebeziel und dem versteckten Div gibt, funktioniert es nicht.
<divclass="product-card-sales-container brand-sales"><divclass="product-card-">Message from the business goes here. They can talk alot or not</div></div>
Antworten:
Sie können so etwas wie tun dies :
Dies verwendet den benachbarten Geschwister-Selektor und ist die Grundlage des Dropdown-Menüs Suckerfish .
Mit HTML5 können Ankerelemente fast alles umschließen. In diesem Fall kann das
div
Element dem Anker untergeordnet werden. Ansonsten ist das Prinzip dasselbe - verwenden Sie die:hover
Pseudoklasse, um diedisplay
Eigenschaft eines anderen Elements zu ändern .quelle
<div>
auf der Seitedisplay:none
und wenn die Maus über "Schwebe über mir!" es wird jedes<div>
folgende<a>
innerhalb des gleichen Elternteils machendisplay:block
. Es könnte eine bessere Idee sein, nach.class-name
oder nach auszuwählen#id
. Ansonsten gute Post.jsfiddle
Da diese Antwort beliebt ist, denke ich, dass eine kleine Erklärung erforderlich ist. Wenn Sie mit dieser Methode über das interne Element fahren, wird es nicht ausgeblendet. Da sich die .showme in .showhim befindet, verschwindet sie nicht, wenn Sie die Maus zwischen den beiden Textzeilen bewegen (oder was auch immer).
Dies sind Beispiele für Macken, auf die Sie bei der Implementierung eines solchen Verhaltens achten müssen.
Es hängt alles davon ab, wofür Sie das brauchen. Diese Methode eignet sich besser für ein Szenario im Menüstil, während die von Yi Jiang für QuickInfos besser geeignet ist.
quelle
<span>
s zu verwenden , aber ich denke, dies ist ein besseres Beispiel als das von Yi Jiang.Ich fand, dass die Verwendung der Deckkraft besser ist. Sie können CSS3- Übergänge hinzufügen , um einen schönen fertigen Hover-Effekt zu erzielen. Die Übergänge werden nur von älteren IE-Browsern gelöscht, sodass sie sich ordnungsgemäß verschlechtern.
quelle
#hover:hover + #stuff {
auf geändert#hover:hover + #stuff, #stuff:hover {
. Dann bleibt das "Zeug" -Div sichtbar, wenn Sie sich über dieses Div bewegen!Ich bin auf jeden Fall ein Experte, aber ich bin unglaublich stolz auf mich, dass ich etwas über diesen Code herausgefunden habe. Wenn Sie tun:
(Beachten Sie das '>') Sie können das Ganze in einem Tag enthalten, solange sich Ihr Trigger (der sich in einem eigenen Div oder direkt in einem Tag befindet oder etwas, das Sie möchten) physisch berührt Mit dem aufgedeckten Div können Sie Ihre Maus von einem zum anderen bewegen.
Vielleicht ist dies nicht sehr nützlich, aber ich musste mein offenbartes Div auf Überlauf einstellen: auto, daher hatte es manchmal Bildlaufleisten, die nicht verwendet werden konnten, sobald Sie sich vom Div entfernen.
Nachdem Sie endlich herausgefunden haben, wie Sie das aufgedeckte Div erstellen können (obwohl es jetzt ein Kind des Auslösers ist, kein Geschwister), setzen Sie sich in Bezug auf den Z-Index hinter den Auslöser (mit ein wenig Hilfe von dieser Seite : So wird ein übergeordnetes Element über dem untergeordneten Element angezeigt über das untergeordnete ) Sie müssen nicht einmal über das aufgedeckte Div rollen, um es zu scrollen. Bewegen Sie den Mauszeiger über den Auslöser und verwenden Sie Ihr Rad oder was auch immer.
Mein aufgedecktes Div deckt den größten Teil der Seite ab, daher macht diese Technik sie viel dauerhafter, anstatt dass der Bildschirm bei jeder Bewegung der Maus von einem Zustand in einen anderen blinkt. Es ist wirklich intuitiv, deshalb bin ich wirklich ziemlich stolz auf mich.
Der einzige Nachteil ist, dass Sie keine Links in das Ganze einfügen können, aber Sie können das Ganze als einen großen Link verwenden.
quelle
Diese Antwort erfordert nicht, dass Sie wissen, welche Art von Anzeige (Inline usw.) das versteckte Element sein soll, wenn es angezeigt wird:
Dies verwendet den benachbarten Geschwister-Selektor und den Nicht-Selektor .
quelle
Ich möchte diese universelle Vorlagenlösung anbieten, die die korrekte Lösung von Yi Jiang erweitert.
Die zusätzlichen Vorteile umfassen:
Im HTML platzieren Sie die folgende Struktur:
In der CSS platzieren Sie die folgende Struktur:
Einige Punkte zu beachten sind:
Bewegen Sie den Mauszeiger über das Popup
Als zusätzliche Information. Wenn das Popup Informationen enthält, die Sie möglicherweise ausschneiden und einfügen möchten, oder ein Objekt enthält, mit dem Sie möglicherweise interagieren möchten, ersetzen Sie zuerst:
mit
Und zweitens passen Sie die Position von div.popup so an, dass es eine Überlappung mit div.information gibt. Ein paar Pixel reichen aus, um sicherzustellen, dass das div.popup den Hover empfangen kann, wenn der Cusor von div.information wegbewegt wird.
Dies funktioniert nicht wie erwartet mit Internet Explorer 10.0.9200 und wie erwartet mit Opera 12.16, Firefox 18.0 und Google Chrome 28.0.15.
Siehe Geige http://jsfiddle.net/F68Le/ für ein komplettes Beispiel mit einem Popup - Menü mit mehreren Ebenen.
quelle
Bitte testen Sie diesen Code
quelle
Das
+
zulässige 'Auswahl' nur erstes nicht verschachteltes Element, das>
Auswahl nur verschachtelte Elemente - desto besser ist es,~
das zu verwenden, um ein beliebiges Element auszuwählen, das dem übergeordneten schwebenden Element untergeordnet ist. Mit Deckkraft / Breite und Übergang können Sie ein glattes Erscheinungsbild erzielenquelle
Wenn ich mit dem versteckten Div interagieren möchte, ohne dass es jedes Mal verschwindet, wenn ich das auslösende Element verlasse (in diesem Fall a), muss ich Folgendes hinzufügen:
quelle
Basierend auf der Hauptantwort ist dies ein Beispiel, das nützlich ist, um einen Informationstooltip anzuzeigen, wenn Sie auf
?
einen Link in der Nähe klicken :quelle
Aus meinen Tests mit diesem CSS:
Und dieser HTML:
Es ergab sich, dass es mit dem zweiten erweitert wird, aber nicht mit dem ersten. Wenn es also ein Div zwischen dem Schwebeziel und dem versteckten Div gibt, funktioniert es nicht.
quelle
HTML
CSS
CodePen: Bewegen Sie den Mauszeiger über div, um Text in einem anderen div anzuzeigen
quelle
Vergiss nicht. Wenn Sie versuchen, um ein Bild zu schweben, müssen Sie es um einen Container legen. CSS:
Wenn Sie mit der Maus darüber fahren:
Dies wird zeigen:
quelle