En utilisant uniquement CSS, affichez div on hover sur <a>
303
Je voudrais montrer un div quand quelqu'un survole un <a>élément, mais je voudrais le faire en CSS et non en JavaScript. Savez-vous comment cela peut être réalisé?
rappelez-vous que: le vol stationnaire ne fonctionnera pas de la même manière sur les écrans tactiles, et ces jours-ci, il doit être utilisé avec prudence (par exemple, éviter d'utiliser pour afficher des éléments de navigation supplémentaires)
Paweł Bulwan
@Pawel Bulwan J'ai combiné les suggestions de sélecteur CSS ": hover" avec "+" d'ici avec une suggestion de cible pour afficher le contenu au clic (de stackoverflow.com/questions/18849520/… ) dans une solution qui devrait fonctionner avec les deux souris et toucher - zoomicon.wordpress.com/2017/11/25/…
George Birbilis
suite à mon dernier commentaire, voir également quelques variations utiles lors d'une réponse à un commentaire que j'ai faite sur ce blog: zoomicon.wordpress.com/2017/11/25/…
HTML5 permet aux éléments d'ancrage d'envelopper presque tout, donc dans ce cas, l' divélément peut devenir un enfant de l'ancre. Sinon, le principe est le même - utilisez la :hoverpseudo-classe pour changer la displaypropriété d'un autre élément.
belle solution, même si vous mettez div: hover {display: block;} alors div ne sera pas caché lorsque vous survolerez div lui-même ..
Alper
22
Cela fera tout <div>sur la page display:noneet lorsque la souris survolera "Survolez-moi!" il fera de chaque abonné <div>à l' <a>intérieur le même parent display:block. Il serait peut-être préférable de sélectionner par .class-nameou par #id. Sinon, bon post.
Nate
10
add div: hover {display: block; } pour le garder dehors pendant que leur souris est dessus
monkeyhouse
Il pourrait être prudent d'utiliser la visibilité au lieu de l'affichage. Si je me souviens bien, c'est plus efficace car l'affichage redessine le div à chaque fois. Bien que cela n'ait probablement pas d'importance pour une seule division, si vous devez en faire plusieurs, il serait préférable de les rendre invisibles à la place.
Prinsig
@Yi Jiang - comment avez-vous ajouté ce code à la réponse?
Puisque cette réponse est populaire, je pense qu'une petite explication est nécessaire. En utilisant cette méthode lorsque vous survolez l'élément interne, il ne disparaîtra pas. Parce que le .showme est à l'intérieur du .showhim, il ne disparaîtra pas lorsque vous déplacez votre souris entre les deux lignes de texte (ou quoi que ce soit).
Ce sont des exemples de quirqs dont vous devez prendre soin lors de la mise en œuvre d'un tel comportement.
Tout dépend de la raison pour laquelle vous en avez besoin. Cette méthode est meilleure pour un scénario de style de menu, tandis que celle de Yi Jiang est meilleure pour les info-bulles.
Vous ne pouvez pas avoir d'élément block à l'intérieur de l'élément inline, sauf si vous utilisez HTML 5.
methyl
3
HTML5 n'est pas encore un standard, donc la méthode de Yi Jiang est meilleure.
méthyl
4
je sais que c'est mieux, c'est pourquoi je l'ai voté :) j'ai donné un exemple de travail, présentant un concept (sélecteurs css plus spécifiquement), je ne vois pas pourquoi le downvote ^^
n00b
Cela pourrait être mieux d'utiliser <span>s, mais je pense que c'est un meilleur exemple que celui de Yi Jiang.
Nate
37
J'ai trouvé que l'utilisation de l'opacité est meilleure, elle vous permet d'ajouter des transitions CSS3 pour créer un bel effet de survol fini. Les transitions seront simplement supprimées par les anciens navigateurs IE, de sorte qu'il se dégrade gracieusement en.
#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;}
C'est génial, je l'ai utilisé pour une div beaucoup plus grande. Je voulais que la div "stuff" reste visible si je déplaçais mon curseur de la div "hover" vers la div "stuff" donc j'ai changé le dernier élément de style de #hover:hover + #stuff {à #hover:hover + #stuff, #stuff:hover {. Ensuite, le div "stuff" reste visible lorsque vous vous déplacez sur ce div!
NotJay
26
Je suis certainement un expert, mais je suis incroyablement fier de moi d'avoir travaillé sur ce code. Si tu fais:
div {
display: none;}
a:hover > div {
display: block;}
(Notez le '>') Vous pouvez contenir le tout dans une balise a, puis, tant que votre déclencheur (qui peut être dans sa propre div, ou directement dans la balise a, ou tout ce que vous voulez) est physiquement en contact le div révélé, vous pouvez déplacer votre souris de l'un à l'autre.
Peut-être que cela n'est pas utile pour beaucoup, mais j'ai dû régler mon div révélé pour qu'il déborde: auto, donc parfois il y avait des barres de défilement, qui ne pouvaient pas être utilisées dès que vous vous éloigniez du div.
En fait, après avoir finalement trouvé comment faire le div révélé, (bien qu'il soit maintenant un enfant du déclencheur, pas un frère), asseyez-vous derrière le déclencheur, en termes de z-index, (avec un peu d'aide de cette page : Comment faire apparaître un élément parent au-dessus de l'enfant ), vous n'avez même pas besoin de survoler le div révélé pour le faire défiler, restez simplement en survolant la gâchette et utilisez votre roue, ou autre chose.
Mon div révélé révèle la majeure partie de la page, donc cette technique la rend beaucoup plus permanente, plutôt que l'écran ne clignote d'un état à l'autre à chaque mouvement de la souris. C'est vraiment intuitif en fait, c'est pourquoi je suis vraiment très fier de moi.
Le seul inconvénient est que vous ne pouvez pas mettre de liens dans le tout, mais vous pouvez utiliser le tout comme un gros lien.
<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>
Je voudrais offrir cette solution de modèle à usage général qui étend la solution correcte fournie par Yi Jiang.
Les avantages supplémentaires incluent:
prise en charge du survol de n'importe quel type d'élément ou de plusieurs éléments;
la fenêtre contextuelle peut être n'importe quel type d'élément ou ensemble d'éléments, y compris des objets;
code auto-documenté;
s'assure que le pop-up apparaît sur les autres éléments;
une base solide à suivre si vous générez du code html à partir d'une base de données.
Dans le html, vous placez la structure suivante:
<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>
Dans le CSS, vous placez la structure suivante:
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;}
Quelques points à noter sont:
Étant donné que la position de div.popup est définie sur fixed (fonctionnerait également avec absolu), le contenu n'est pas dans le flux normal du document, ce qui permet à l'attribut visible de bien fonctionner.
z-index est défini pour garantir que le div.popup apparaît au-dessus des autres éléments de la page.
L'information_popup_container est définie sur une petite taille et ne peut donc pas être survolée.
Ce code prend uniquement en charge le survol de l'élément div.information. Pour prendre en charge le survol à la fois de div.information et div.popup, reportez-vous à la section Hover Over The Popup ci-dessous.
Il a été testé et fonctionne comme prévu dans Opera 12.16 Internet Explorer 10.0.9200, Firefox 18.0 et Google Chrome 28.0.15.
Survolez le pop-up
Comme information supplémentaire. Lorsque la fenêtre contextuelle contient des informations que vous souhaitez peut-être couper et coller ou contient un objet avec lequel vous souhaitez interagir, remplacez d'abord:
Et deuxièmement, ajustez la position de div.popup afin qu'il y ait un chevauchement avec div.information. Quelques pixels suffisent pour garantir que le pop-up div puisse recevoir le vol stationnaire lors du déplacement du cusor hors des informations div.
Cela ne fonctionne pas comme prévu avec Internet Explorer 10.0.9200 et fonctionne comme prévu avec Opera 12.16, Firefox 18.0 et Google Chrome 28.0.15.
Voir violon http://jsfiddle.net/F68Le/ pour un exemple complet avec un menu contextuel à plusieurs niveaux.
<!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>
L' +autorisation permet de «sélectionner» uniquement le premier élément non imbriqué, les >éléments sélectionnés uniquement imbriqués - le mieux est d'utiliser ~qui permet de sélectionner l'élément arbitraire qui est l'enfant de l'élément survolé parent. En utilisant l'opacité / largeur et la transition, vous pouvez donner un aspect lisse
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>
Pour moi, si je veux interagir avec la div cachée sans la voir disparaître à chaque fois que je quitte l'élément déclencheur (a dans ce cas) je dois ajouter:
, il en résulte qu'il se développe en utilisant le second, mais ne se développe pas en utilisant le premier. Donc, s'il y a un div entre la cible de vol stationnaire et le div caché, cela ne fonctionnera pas.
<divclass="product-card-sales-container brand-sales"><divclass="product-card-">Message from the business goes here. They can talk alot or not</div></div>
Réponses:
Vous pouvez faire quelque chose comme ça :
Il utilise le sélecteur de frères et sœurs adjacent et constitue la base du menu déroulant du meunier .
HTML5 permet aux éléments d'ancrage d'envelopper presque tout, donc dans ce cas, l'
div
élément peut devenir un enfant de l'ancre. Sinon, le principe est le même - utilisez la:hover
pseudo-classe pour changer ladisplay
propriété d'un autre élément.la source
<div>
sur la pagedisplay:none
et lorsque la souris survolera "Survolez-moi!" il fera de chaque abonné<div>
à l'<a>
intérieur le même parentdisplay:block
. Il serait peut-être préférable de sélectionner par.class-name
ou par#id
. Sinon, bon post.jsfiddle
Puisque cette réponse est populaire, je pense qu'une petite explication est nécessaire. En utilisant cette méthode lorsque vous survolez l'élément interne, il ne disparaîtra pas. Parce que le .showme est à l'intérieur du .showhim, il ne disparaîtra pas lorsque vous déplacez votre souris entre les deux lignes de texte (ou quoi que ce soit).
Ce sont des exemples de quirqs dont vous devez prendre soin lors de la mise en œuvre d'un tel comportement.
Tout dépend de la raison pour laquelle vous en avez besoin. Cette méthode est meilleure pour un scénario de style de menu, tandis que celle de Yi Jiang est meilleure pour les info-bulles.
la source
<span>
s, mais je pense que c'est un meilleur exemple que celui de Yi Jiang.J'ai trouvé que l'utilisation de l'opacité est meilleure, elle vous permet d'ajouter des transitions CSS3 pour créer un bel effet de survol fini. Les transitions seront simplement supprimées par les anciens navigateurs IE, de sorte qu'il se dégrade gracieusement en.
la source
#hover:hover + #stuff {
à#hover:hover + #stuff, #stuff:hover {
. Ensuite, le div "stuff" reste visible lorsque vous vous déplacez sur ce div!Je suis certainement un expert, mais je suis incroyablement fier de moi d'avoir travaillé sur ce code. Si tu fais:
(Notez le '>') Vous pouvez contenir le tout dans une balise a, puis, tant que votre déclencheur (qui peut être dans sa propre div, ou directement dans la balise a, ou tout ce que vous voulez) est physiquement en contact le div révélé, vous pouvez déplacer votre souris de l'un à l'autre.
Peut-être que cela n'est pas utile pour beaucoup, mais j'ai dû régler mon div révélé pour qu'il déborde: auto, donc parfois il y avait des barres de défilement, qui ne pouvaient pas être utilisées dès que vous vous éloigniez du div.
En fait, après avoir finalement trouvé comment faire le div révélé, (bien qu'il soit maintenant un enfant du déclencheur, pas un frère), asseyez-vous derrière le déclencheur, en termes de z-index, (avec un peu d'aide de cette page : Comment faire apparaître un élément parent au-dessus de l'enfant ), vous n'avez même pas besoin de survoler le div révélé pour le faire défiler, restez simplement en survolant la gâchette et utilisez votre roue, ou autre chose.
Mon div révélé révèle la majeure partie de la page, donc cette technique la rend beaucoup plus permanente, plutôt que l'écran ne clignote d'un état à l'autre à chaque mouvement de la souris. C'est vraiment intuitif en fait, c'est pourquoi je suis vraiment très fier de moi.
Le seul inconvénient est que vous ne pouvez pas mettre de liens dans le tout, mais vous pouvez utiliser le tout comme un gros lien.
la source
Cette réponse ne nécessite pas que vous connaissiez le type d'affichage (en ligne, etc.) que l'élément masquable est censé être lorsqu'il est affiché:
Celui-ci utilise le sélecteur frère et le sélecteur non adjacent .
la source
Je voudrais offrir cette solution de modèle à usage général qui étend la solution correcte fournie par Yi Jiang.
Les avantages supplémentaires incluent:
Dans le html, vous placez la structure suivante:
Dans le CSS, vous placez la structure suivante:
Quelques points à noter sont:
Survolez le pop-up
Comme information supplémentaire. Lorsque la fenêtre contextuelle contient des informations que vous souhaitez peut-être couper et coller ou contient un objet avec lequel vous souhaitez interagir, remplacez d'abord:
avec
Et deuxièmement, ajustez la position de div.popup afin qu'il y ait un chevauchement avec div.information. Quelques pixels suffisent pour garantir que le pop-up div puisse recevoir le vol stationnaire lors du déplacement du cusor hors des informations div.
Cela ne fonctionne pas comme prévu avec Internet Explorer 10.0.9200 et fonctionne comme prévu avec Opera 12.16, Firefox 18.0 et Google Chrome 28.0.15.
Voir violon http://jsfiddle.net/F68Le/ pour un exemple complet avec un menu contextuel à plusieurs niveaux.
la source
veuillez tester ce code
la source
L'
+
autorisation permet de «sélectionner» uniquement le premier élément non imbriqué, les>
éléments sélectionnés uniquement imbriqués - le mieux est d'utiliser~
qui permet de sélectionner l'élément arbitraire qui est l'enfant de l'élément survolé parent. En utilisant l'opacité / largeur et la transition, vous pouvez donner un aspect lissela source
Pour moi, si je veux interagir avec la div cachée sans la voir disparaître à chaque fois que je quitte l'élément déclencheur (a dans ce cas) je dois ajouter:
la source
Sur la base de la réponse principale, voici un exemple, utile pour afficher une info-bulle d'information en cliquant sur
?
un lien proche:la source
D'après mes tests en utilisant ce CSS:
Et ce HTML:
, il en résulte qu'il se développe en utilisant le second, mais ne se développe pas en utilisant le premier. Donc, s'il y a un div entre la cible de vol stationnaire et le div caché, cela ne fonctionnera pas.
la source
HTML
CSS
CodePen: survoler sur div afficher le texte dans une autre div
la source
N'oublie pas. si vous essayez de survoler une image, vous devez la placer autour d'un conteneur. css:
Si vous passez la souris dessus:
Cela montrera:
la source