Usando solo CSS, muestre div al pasar el mouse sobre <a>
302
Me gustaría mostrar un div cuando alguien pasa el cursor sobre un <a>elemento, pero me gustaría hacerlo en CSS y no en JavaScript. ¿Sabes cómo se puede lograr esto?
recuerde que: hover no funcionará de la misma manera en pantallas táctiles, y en estos días debe usarse con precaución (por ejemplo, evite usar para mostrar elementos de navegación adicionales)
Paweł Bulwan
@Pawel Bulwan Combiné ": hover" con "+" sugerencias de selector de CSS desde aquí con una sugerencia: objetivo para mostrar contenido al hacer clic (de stackoverflow.com/questions/18849520/… ) en una solución que debería funcionar con ambos mouse y toque - zoomicon.wordpress.com/2017/11/25/…
George Birbilis
siguiendo mi último comentario, también veo algunas variaciones útiles en una respuesta de comentario que hice en esa publicación de blog: zoomicon.wordpress.com/2017/11/25/…
HTML5 permite que los elementos de anclaje envuelvan casi cualquier cosa, por lo que en ese caso el divelemento puede hacerse hijo del ancla. De lo contrario, el principio es el mismo: use la :hoverpseudoclase para cambiar la displaypropiedad de otro elemento.
buena solución, incluso si pones div: hover {display: block;} entonces div no se ocultará cuando pases el div por sí mismo.
Alper
22
Esto hará que todos <div>en la página display:noney cuando el mouse se mueva sobre "¡Pasa sobre mí!" hará que cada <div>seguimiento <a>dentro del mismo padre display:block. Puede ser una mejor idea seleccionar por .class-nameo por #id. De lo contrario, buena publicación.
Nate
10
agregar div: hover {display: block; } para mantenerlo afuera mientras su mouse está sobre él
monkeyhouse
Puede ser prudente usar la visibilidad en lugar de la pantalla. Según recuerdo, es más eficiente porque la pantalla vuelve a dibujar el div cada vez. Aunque probablemente no importa para un div, si tiene que hacer muchos, sería mejor hacerlos invisibles.
Prinsig
@Yi Jiang: ¿cómo agregaste este código a la respuesta?
Como esta respuesta es popular, creo que se necesita una pequeña explicación. Usando este método cuando pasa el cursor sobre el elemento interno, no desaparecerá. Debido a que .showme está dentro de .showhim, no desaparecerá cuando mueva el mouse entre las dos líneas de texto (o lo que sea).
Estos son ejemplos de peculiaridades que debe tener en cuenta al implementar dicho comportamiento.
Todo depende de para qué lo necesites. Este método es mejor para un escenario de estilo de menú, mientras que Yi Jiang es mejor para la información sobre herramientas.
No puede tener un elemento de bloque dentro del elemento en línea, a menos que esté utilizando HTML 5.
metil
3
HTML5 aún no es un estándar, por lo que el método de Yi Jiang es mejor.
metil
44
sé que es mejor, es por eso que lo voté :) Di un ejemplo de trabajo, presentando un concepto (selectores css más específicamente), no veo por qué lo voté a favor ^^
n00b
Podría ser mejor usar <span>s, pero creo que este es un mejor ejemplo que el de Yi Jiang.
Nate
37
Descubrí que usar opacidad es mejor, le permite agregar transiciones css3 para hacer un bonito efecto de desplazamiento final. Las transiciones solo serán eliminadas por los navegadores IE más antiguos, por lo que se degrada con gracia.
#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;}
Esto es genial, lo usé para un div mucho más grande. Quería que el div "cosas" permaneciera visible si movía el cursor del div "flotante" al div "cosas", así que cambié el último elemento de estilo de #hover:hover + #stuff {a #hover:hover + #stuff, #stuff:hover {. ¡Entonces el div "cosas" permanece visible cuando te mueves sobre ese div!
NoJay
26
Por cierto, soy un experto, pero estoy increíblemente orgulloso de mí mismo por haber resuelto algo sobre este código. Si lo haces:
div {
display: none;}
a:hover > div {
display: block;}
(Tenga en cuenta el '>') Puede contener todo en una etiqueta, luego, siempre que su disparador (que puede estar en su propio div, o directamente en la etiqueta, o cualquier cosa que desee) se toque físicamente el div revelado, puedes mover tu mouse de uno a otro.
Tal vez esto no sea útil en gran medida, pero tuve que configurar mi div revelado para que se desbordara: automático, por lo que a veces tenía barras de desplazamiento, que no podían usarse tan pronto como te alejabas del div.
De hecho, después de averiguar cómo hacer el div revelado (aunque ahora es un elemento secundario del gatillo, no un hermano), siéntese detrás del gatillo, en términos de índice z, (con un poco de ayuda de esta página : Cómo hacer que un elemento padre aparezca sobre el hijo ) ni siquiera tiene que rodar sobre el div revelado para desplazarse, simplemente manténgase sobre el gatillo y use su rueda, o lo que sea.
Mi div revelado cubre la mayor parte de la página, por lo que esta técnica lo hace mucho más permanente, en lugar de que la pantalla parpadee de un estado a otro con cada movimiento del mouse. En realidad, es realmente intuitivo, por eso estoy muy orgulloso de mí mismo.
El único inconveniente es que no puedes poner enlaces dentro de todo, pero puedes usar todo como un gran enlace.
<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>
Me gustaría ofrecer esta solución de plantilla de propósito general que se expande en la solución correcta provista por Yi Jiang.
Los beneficios adicionales incluyen:
soporte para desplazarse sobre cualquier tipo de elemento, o elementos múltiples;
la ventana emergente puede ser cualquier tipo de elemento o conjunto de elementos, incluidos los objetos;
código autodocumentado;
asegura que la ventana emergente aparezca sobre los otros elementos;
Una base sólida a seguir si está generando código html desde una base de datos.
En el html colocas la siguiente estructura:
<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>
En el CSS coloca la siguiente estructura:
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;}
Algunos puntos a tener en cuenta son:
Debido a que la posición de div.popup está establecida como fija (también funcionaría con absoluta), el contenido no está dentro del flujo normal del documento, lo que permite que el atributo visible funcione bien.
z-index se establece para garantizar que div.popup aparezca sobre los otros elementos de la página.
Information_popup_container está configurado en un tamaño pequeño y, por lo tanto, no se puede pasar por encima.
Este código solo admite el desplazamiento sobre el elemento div.information. Para soportar el desplazamiento sobre div.information y div.popup, vea Hover Over The Popup a continuación.
Ha sido probado y funciona como se esperaba en Opera 12.16 Internet Explorer 10.0.9200, Firefox 18.0 y Google Chrome 28.0.15.
Pase el ratón sobre la ventana emergente
Como información adicional. Cuando la ventana emergente contiene información que tal vez desee cortar y pegar o un objeto con el que desee interactuar, primero reemplace:
Y segundo, ajuste la posición de div.popup para que se superponga con div.information. Unos pocos píxeles son suficientes para garantizar que el div.popup pueda recibir el desplazamiento al mover el cursor fuera de la información div.
Esto no funciona como se esperaba con Internet Explorer 10.0.9200 y funciona como se espera con Opera 12.16, Firefox 18.0 y Google Chrome 28.0.15.
Consulte fiddle http://jsfiddle.net/F68Le/ para ver un ejemplo completo con un menú emergente multinivel.
<!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>
La +permiten 'seleccionar' sólo el primer elemento no anidada, los >únicos elementos anidados seleccione - el mejor es usar ~que permiten seleccionar elemento arbitrario que es hijo de padres revoloteaban elemento. Usando opacidad / ancho y transición puede proporcionar una apariencia suave
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>
Basado en la respuesta principal, este es un ejemplo, útil para mostrar información sobre herramientas de información al hacer clic en ?un enlace cercano:
, resultó que se expande usando el segundo, pero no se expande usando el primero. Entonces, si hay un div entre el objetivo de desplazamiento y el div oculto, entonces no funcionará.
<divclass="product-card-sales-container brand-sales"><divclass="product-card-">Message from the business goes here. They can talk alot or not</div></div>
Respuestas:
Puedes hacer algo como esto :
Esto utiliza el selector de hermanos adyacentes , y es la base del menú desplegable de suckerfish .
HTML5 permite que los elementos de anclaje envuelvan casi cualquier cosa, por lo que en ese caso el
div
elemento puede hacerse hijo del ancla. De lo contrario, el principio es el mismo: use la:hover
pseudoclase para cambiar ladisplay
propiedad de otro elemento.fuente
<div>
en la páginadisplay:none
y cuando el mouse se mueva sobre "¡Pasa sobre mí!" hará que cada<div>
seguimiento<a>
dentro del mismo padredisplay:block
. Puede ser una mejor idea seleccionar por.class-name
o por#id
. De lo contrario, buena publicación.jsfiddle
Como esta respuesta es popular, creo que se necesita una pequeña explicación. Usando este método cuando pasa el cursor sobre el elemento interno, no desaparecerá. Debido a que .showme está dentro de .showhim, no desaparecerá cuando mueva el mouse entre las dos líneas de texto (o lo que sea).
Estos son ejemplos de peculiaridades que debe tener en cuenta al implementar dicho comportamiento.
Todo depende de para qué lo necesites. Este método es mejor para un escenario de estilo de menú, mientras que Yi Jiang es mejor para la información sobre herramientas.
fuente
<span>
s, pero creo que este es un mejor ejemplo que el de Yi Jiang.Descubrí que usar opacidad es mejor, le permite agregar transiciones css3 para hacer un bonito efecto de desplazamiento final. Las transiciones solo serán eliminadas por los navegadores IE más antiguos, por lo que se degrada con gracia.
fuente
#hover:hover + #stuff {
a#hover:hover + #stuff, #stuff:hover {
. ¡Entonces el div "cosas" permanece visible cuando te mueves sobre ese div!Por cierto, soy un experto, pero estoy increíblemente orgulloso de mí mismo por haber resuelto algo sobre este código. Si lo haces:
(Tenga en cuenta el '>') Puede contener todo en una etiqueta, luego, siempre que su disparador (que puede estar en su propio div, o directamente en la etiqueta, o cualquier cosa que desee) se toque físicamente el div revelado, puedes mover tu mouse de uno a otro.
Tal vez esto no sea útil en gran medida, pero tuve que configurar mi div revelado para que se desbordara: automático, por lo que a veces tenía barras de desplazamiento, que no podían usarse tan pronto como te alejabas del div.
De hecho, después de averiguar cómo hacer el div revelado (aunque ahora es un elemento secundario del gatillo, no un hermano), siéntese detrás del gatillo, en términos de índice z, (con un poco de ayuda de esta página : Cómo hacer que un elemento padre aparezca sobre el hijo ) ni siquiera tiene que rodar sobre el div revelado para desplazarse, simplemente manténgase sobre el gatillo y use su rueda, o lo que sea.
Mi div revelado cubre la mayor parte de la página, por lo que esta técnica lo hace mucho más permanente, en lugar de que la pantalla parpadee de un estado a otro con cada movimiento del mouse. En realidad, es realmente intuitivo, por eso estoy muy orgulloso de mí mismo.
El único inconveniente es que no puedes poner enlaces dentro de todo, pero puedes usar todo como un gran enlace.
fuente
Esta respuesta no requiere que sepa qué tipo de visualización (en línea, etc.) se supone que debe ser el elemento ocultable cuando se muestra:
Esto usa el selector hermano adyacente y el selector no .
fuente
Me gustaría ofrecer esta solución de plantilla de propósito general que se expande en la solución correcta provista por Yi Jiang.
Los beneficios adicionales incluyen:
En el html colocas la siguiente estructura:
En el CSS coloca la siguiente estructura:
Algunos puntos a tener en cuenta son:
Pase el ratón sobre la ventana emergente
Como información adicional. Cuando la ventana emergente contiene información que tal vez desee cortar y pegar o un objeto con el que desee interactuar, primero reemplace:
con
Y segundo, ajuste la posición de div.popup para que se superponga con div.information. Unos pocos píxeles son suficientes para garantizar que el div.popup pueda recibir el desplazamiento al mover el cursor fuera de la información div.
Esto no funciona como se esperaba con Internet Explorer 10.0.9200 y funciona como se espera con Opera 12.16, Firefox 18.0 y Google Chrome 28.0.15.
Consulte fiddle http://jsfiddle.net/F68Le/ para ver un ejemplo completo con un menú emergente multinivel.
fuente
por favor prueba este código
fuente
La
+
permiten 'seleccionar' sólo el primer elemento no anidada, los>
únicos elementos anidados seleccione - el mejor es usar~
que permiten seleccionar elemento arbitrario que es hijo de padres revoloteaban elemento. Usando opacidad / ancho y transición puede proporcionar una apariencia suavefuente
Para mí, si quiero interactuar con el div oculto sin verlo desaparecer cada vez que dejo el elemento desencadenante (a en ese caso) debo agregar:
fuente
Basado en la respuesta principal, este es un ejemplo, útil para mostrar información sobre herramientas de información al hacer clic en
?
un enlace cercano:fuente
De mis pruebas usando este CSS:
Y este HTML:
, resultó que se expande usando el segundo, pero no se expande usando el primero. Entonces, si hay un div entre el objetivo de desplazamiento y el div oculto, entonces no funcionará.
fuente
HTML
CSS
CodePen: coloca el cursor sobre el texto del show div en otro div
fuente
No lo olvides Si intenta desplazarse alrededor de una imagen, debe colocarla alrededor de un contenedor. css:
Si te desplazas sobre esto:
Esto mostrará:
fuente