2012-06-12 97 views
78

¿Hay alguna manera de hacer lo contrario de :hoverusando solo CSS? Como en: si :hover es on Mouse Enter, ¿hay un CSS equivalente a on Mouse Leave?¿Qué es lo opuesto a: pasar el mouse (al dejar el mouse)?

Ejemplo:

Tengo un menú HTML utilizando elementos de la lista. Cuando cierro uno de los elementos, hay una animación en color CSS desde #999 hasta black. ¿Cómo puedo crear el efecto opuesto cuando el mouse sale del área de elementos, con una animación de black a #999?

jsFiddle

(Tenga en cuenta que yo no deseo contestar solamente este ejemplo, sino a todo el "opuesto de :hover" cuestión.)

+0

¿Qué estás tratando de hacer exactamente? Tal vez hay una alternativa diferente? –

+0

use jquery mouse out –

+11

Lo contrario de ': hover' es simplemente': ​​not (: hover) '; sin embargo, ': hover' es * no * sinónimo de' onmouseenter' ni es ': not (: hover)' igual que 'onmouseleave'. CSS no tiene ningún concepto de eventos DOM. – BoltClock

Respuesta

65

Si he entendido bien que podría hacer lo mismo moviendo sus transiciones al enlace en lugar del estado estacionario:

ul li a { 
    color:#999;  
    transition: color 0.5s linear; /* vendorless fallback */ 
    -o-transition: color 0.5s linear; /* opera */ 
    -ms-transition: color 0.5s linear; /* IE 10 */ 
    -moz-transition: color 0.5s linear; /* Firefox */ 
    -webkit-transition: color 0.5s linear; /*safari and chrome */ 
} 

ul li a:hover { 
    color:black; 
    cursor: pointer; 
} 

http://jsfiddle.net/spacebeers/sELKu/3/

La definición de hover es:

El: selector de desplazamiento se usa para seleccionar elementos cuando pasa el mouse sobre ellos.

Por esa definición lo contrario de libración es cualquier punto en el que el ratón es no sobre él.Alguien mucho más inteligente que me ha hecho este artículo, el establecimiento de diferentes transiciones en ambos estados - http://css-tricks.com/different-transitions-for-hover-on-hover-off/

#thing { 
    padding: 10px; 
    border-radius: 5px; 

    /* HOVER OFF */ 
    -webkit-transition: padding 2s; 
} 

#thing:hover { 
    padding: 20px; 
    border-radius: 15px; 

    /* HOVER ON */ 
    -webkit-transition: border-radius 2s; 
} 
+1

"(Tenga en cuenta que no deseo responder solo a este ejemplo, sino a todo el asunto" al revés de: suspender ")" – Cthulhu

+1

@Cthulhu - He editado mi respuesta ahora. Eso podría ayudar un poco más. Pensé que era una respuesta demasiado obvia. – SpaceBeers

+0

+1 por señalarme en la dirección correcta. Estaba teniendo una discrepancia de animación entre los navegadores. Chrome estaba haciendo que todo fuera más fluido, pero tenía un .1s diferente en las transiciones y Mozilla e IE mostraban el error. Pude arreglarlo haciendo coincidir mis números de transición. – Termato

5

No hay ninguna propiedad explícita de permiso ratón en CSS .

Puede usar: pase el mouse sobre todos los demás elementos excepto el elemento en cuestión para lograr este efecto. Pero no estoy seguro de lo práctico que sería.

Creo que tiene que mirar una solución JS/jQuery.

+0

JS no es necesario en este caso, y ahora lo desalentaría, aunque una justificación de rendimiento. –

+0

No es necesario para el ejemplo anterior, pero parece ser la mejor solución para todo el problema de "dejar el mouse". – Cthulhu

11

Simplemente use CSS transitions en lugar de animaciones.

A { 
    color: #999; 
    transition: color 1s ease-in-out; 
} 

A:hover { 
    color: #000; 
} 

Live demo

+0

Como dije en el ejemplo, mi problema no está en la animación, sino en la parte "al salir del mouse". – Cthulhu

+3

La transición funciona tanto con el mouse como con el mouse. Es suficiente para especificar estilos para el estado normal y el estado ': hover'. –

+1

@Cthulhu Ver [JSfiddle demo] (http://jsfiddle.net/SZqkb/1/) He añadido. –

0

Has entendido mal :hover; dice que el mouse está sobre un elemento, en lugar de que el mouse haya ingresado el elemento.

Puede agregar animaciones al selector sin :hover para lograr el efecto que desee.

transiciones es una mejor opción: http://jsfiddle.net/Cvx96/

+0

Su violín no produce el resultado deseado. –

0

Lo opuesto a :hover parece ser :link.

(edit: técnicamente no es un opuesto, porque hay 4 selectores :link, :visited, :hover y :active cinco si se incluye :focus..)

Por ejemplo cuando se define una regla .button:hover{ text-decoration:none } a quitar el subrayado en un botón, el subrayado aparece cuando sueltas el botón en algunos navegadores. Me he fijado esto con .button:hover, .button:link{ text-decoration:none }

Por supuesto, esto sólo funciona para los elementos que son en realidad enlaces (tiene atributo href)

+0

Su información es incorrecta. ': link' solo selecciona enlaces, tan simple como eso. Mire aquí la definición de ': link': https://developer.mozilla.org/en-US/docs/Web/CSS/%3Alink – Cthulhu

+0

@ Strive55 Ahhh, gracias, tiene sentido. El enlace que proporcionó indica que "Para dar un estilo adecuado a los enlaces, debe colocar: la regla de enlace antes que las otras, tal como lo define el orden LVHA:: enlace -: visitado -: desplazado -: activo." Si lo entiendo correctamente, eso significa que si ninguno de los otros selectores se aplica (: visitado,: hover o: activo), entonces: el enlace es el que aplica. No es técnicamente un opuesto, porque hay 4, pero todavía funciona – scripter

0

Aunque respuestas aquí son suficientes, realmente creo W3Schools ejemplo en este tema es muy sencillo (se aclarado la confusión (para mí) de inmediato).

utilice el selector :hover para cambiar el estilo de un botón cuando se pasa el ratón sobre él.

Consejo: Usar la propiedad de transición de duración para determinar la velocidad de el "flotar" efecto:

Ejemplo

.button { 
    -webkit-transition-duration: 0.4s; /* Safari & Chrome */ 
    transition-duration: 0.4s; 
} 

.button:hover { 
    background-color: #4CAF50; /* Green */ 
    color: white; 
} 

En resumen, para las transiciones donde desea que el " ingrese "y" exit "para que las animaciones sean iguales, necesita emplear transiciones en el selector principal .button en lugar del selector de desplazamiento .button:hover. Para las transiciones en las que desea que las animaciones "enter" y "exit" sean diferentes, deberá especificar las diferentes selecciones del selector principal y del selector de desplazamiento.

Cuestiones relacionadas