2012-06-12 3 views
78

C'è un modo per fare l'opposto di :hoverutilizzando solo CSS? Come in: se :hover è on Mouse Enter, esiste un valore CSS equivalente a on Mouse Leave?Qual è l'opposto di: hover (in mouse leave)?

Esempio:

Ho un menù HTML utilizzando gli elementi della lista. Quando passo il mouse su uno degli elementi, c'è un'animazione di colore CSS da #999 a black. Come posso creare l'effetto opposto quando il mouse lascia l'area dell'oggetto, con un'animazione da black a #999?

jsFiddle

(avete in mente che io non voglio rispondere solo questo esempio, ma l'intero "opposto di :hover" questione.)

+0

Che cosa stai cercando di fare esattamente? Forse c'è un'alternativa diversa? –

+0

usa jquery mouse out –

+11

L'opposto di ': hover' è semplicemente': ​​not (: hover) '; tuttavia, ': hover' è * non * sinonimo di' onmouseenter', né ': not (: hover)' uguale a 'onmouseleave'. I CSS non hanno alcun concetto di eventi DOM. – BoltClock

risposta

65

Se ho capito bene si potrebbe fare la stessa cosa muovendo le transizioni al link, piuttosto che lo stato hover:

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 definizione di hover è:

: il selettore al passaggio del mouse viene utilizzato per selezionare gli elementi quando si sposta il mouse su .

Con tale definizione l'opposto di librazione è un qualsiasi punto in cui il mouse non sopra.Qualcuno molto più intelligente di me ha fatto questo articolo, impostando diverse transizioni su entrambi gli stati - 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

"(Tieni presente che non desidero rispondere solo a questo esempio, ma all'intero problema" opposto di: hover ")" – Cthulhu

+1

@Cthulhu - Ho modificato la mia risposta ora. Questo potrebbe aiutare un po 'di più. Pensavo fosse una risposta troppo ovvia. – SpaceBeers

+0

+1 per avermi indicato nella giusta direzione. Stavo avendo una discrepanza di animazione tra i browser. Chrome rendeva tutto più fluido, ma avevo un .1 diverso nelle transizioni e Mozilla e IE mostravano entrambi l'errore. Sono stato in grado di risolverlo abbinando i miei numeri di transizione. – Termato

5

No, non c'è alcuna proprietà esplicita per ferie del mouse in CSS .

È possibile utilizzare: al passaggio del mouse su tutti gli altri elementi tranne l'elemento in questione per ottenere questo effetto. Ma non sono sicuro di quanto sarebbe pratico.

Penso che si debba guardare una soluzione JS/jQuery.

+0

JS non è necessario in questo caso, e ora lo scoraggerei, anche se una giustificazione della performance. –

+0

Non è necessario per l'esempio sopra, ma sembra essere la soluzione migliore per l'intero problema del "mouse leave". – Cthulhu

11

Basta usare CSS transitions invece di animazioni.

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

A:hover { 
    color: #000; 
} 

Live demo

+0

Come ho detto sull'esempio, il mio problema non riguarda l'animazione, ma la parte "on mouse leave". – Cthulhu

+3

La transizione funziona sia con il mouse che con il mouse. È sufficiente specificare gli stili per lo stato normale e lo stato ': hover'. –

+1

@Cthulhu Vedi [demo JSfiddle] (http://jsfiddle.net/SZqkb/1/) che ho aggiunto. –

0

Hai capito male :hover; dice che il mouse è sopra un oggetto, piuttosto che il mouse ha appena inserito l'oggetto.

È possibile aggiungere animazione al selettore senza :hover per ottenere l'effetto desiderato.

Transitions è una scelta migliore: http://jsfiddle.net/Cvx96/

+0

Il tuo violino non produce il risultato desiderato. –

0

L'opposto di :hover sembra essere :link.

(edit: non è tecnicamente un opposto, perché ci sono 4 selettori :link, :visited, :hover e :active Cinque se si include :focus..)

Per esempio quando si definisce una regola .button:hover{ text-decoration:none } per rimuovere la sottolineatura su un pulsante, la sottolineatura compare quando si rilascia il pulsante in alcuni browser. Ho fissato questo con .button:hover, .button:link{ text-decoration:none }

Questo ovviamente funziona solo per gli elementi che sono in realtà i collegamenti (hanno attributo href)

+0

Le tue informazioni non sono corrette. ': link' seleziona solo i collegamenti, così semplice. Guarda qui la definizione di ': link': https://developer.mozilla.org/en-US/docs/Web/CSS/%3Alink – Cthulhu

+0

@ Strive55 Ahhh, grazie, ha senso. Il link che hai fornito afferma che "Per creare uno stile appropriato per i link, devi mettere la regola: link prima delle altre, come definito dall'ordine LVHA:: link -: visited -: hover -: active." Se ho capito bene, ciò significa che se nessuno degli altri selettori si applica (: visited,: hover, o: active) allora: link è quello che si applica. Non tecnicamente un contrario, perché ce ne sono 4, ma funziona ancora – scripter

0

Anche se le risposte qui sono sufficienti, penso davvero W3Schools esempio su questo tema è molto semplice (si chiarito la confusione (per me) subito).

utilizzare il selettore :hover per modificare lo stile di un pulsante quando si sposta il mouse su di esso.

Suggerimento: Utilizzare la proprietà transizione durata per determinare la velocità del del "hover" effetto:

Esempio

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

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

In sintesi, per le transizioni in cui si desidera che il " inserire le animazioni "e" esci "per essere uguali, è necessario utilizzare le transizioni sul selettore principale .button anziché sul selettore al passaggio del mouse .button:hover. Per le transizioni in cui si desidera che le animazioni "enter" e "exit" siano diverse, è necessario specificare diverse selezioni del selettore principale e del selettore al passaggio del mouse.