2012-06-12 39 views
78

Gibt es eine Möglichkeit, das Gegenteil von :hovermit nur CSS zu tun? Wie in: Wenn :hoveron Mouse Enter ist, gibt es eine CSS-Entsprechung zu on Mouse Leave?Was ist das Gegenteil von: Hover (bei Maus verlassen)?

Beispiel:

Ich habe ein HTML-Menü Listenelemente. Wenn ich eines der Elemente schwebe, gibt es eine CSS-Farbanimation von #999 bis black. Wie kann ich den gegenteiligen Effekt erzeugen, wenn die Maus den Objektbereich verlässt, mit einer Animation von black bis #999?

jsFiddle

(Haben Sie daran, dass ich mag nicht nur dieses Beispiel beantworten, sondern das gesamte „Gegenteil von :hover“ -Ausgabe.)

+0

Was genau versuchen Sie zu tun? Vielleicht gibt es eine andere Alternative? –

+0

benutze jquery mouse out –

+11

Das Gegenteil von ': hover' ist ganz einfach': not (: hover) '; '' hover' 'ist jedoch * nicht * synonym mit 'onmouseenter' noch ist': not (: hover) 'das selbe wie' onmouseleave'. CSS hat kein Konzept von DOM-Ereignissen. – BoltClock

Antwort

65

Wenn ich das richtig verstanden, könnten Sie das gleiche tun, indem Sie Ihre Übergänge auf den Link, anstatt den Schwebezustand zu bewegen:

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/

Die Definition von Hover lautet:

Der: Hover Selector wird verwendet, um Elemente auszuwählen, wenn Sie die Maus über bewegen.

Durch diese Definition das Gegenteil von schwebe ist jeder Punkt, an dem die Maus ist nicht darüber.Jemand weit klüger als ich diesen Artikel gemacht hat, verschiedene Übergänge auf beiden Zustände einstellen - 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

"(Denken Sie daran, dass ich nicht nur dieses Beispiel beantworten möchte, sondern das ganze" Gegenteil von: Hover "-Ausgabe.)" – Cthulhu

+1

@Cthulhu - Ich habe meine Antwort jetzt bearbeitet. Das könnte ein bisschen mehr helfen. Ich dachte, das wäre eine zu offensichtliche Antwort. – SpaceBeers

+0

+1 für mich in die richtige Richtung. Ich hatte eine Animationsdiskrepanz zwischen Browsern. Chrome lief alles flüssiger, aber ich hatte eine .1s in den Übergängen und Mozilla und IE zeigten beide den Fehler an. Ich konnte es beheben, indem ich meine Übergangszahlen anpasste. – Termato

5

Nein gibt es keine explizite Eigenschaft für Maus Urlaub in CSS .

Sie könnten verwenden: Hover auf alle anderen Elemente außer dem fraglichen Element, um diesen Effekt zu erzielen. Aber ich bin nicht sicher, wie praktisch das wäre.

Ich denke, Sie müssen eine JS/jQuery-Lösung betrachten.

+0

JS wird in diesem Fall nicht benötigt, und ich würde es jetzt abraten, obwohl es eine Rechtfertigung für die Leistung ist. –

+0

Es ist nicht für das obige Beispiel erforderlich, aber es scheint die beste Lösung für das gesamte Problem "Maus verlassen" zu sein. – Cthulhu

11

Verwenden Sie einfach CSS transitions anstelle von Animationen.

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

A:hover { 
    color: #000; 
} 

Live demo

+0

Wie ich im Beispiel gesagt habe, ist mein Problem nicht mit der Animation, sondern mit dem "on mouse leave" -Teil. – Cthulhu

+3

Der Übergang funktioniert sowohl bei Mausübergabe als auch bei Mausklick. Es reicht aus, Styles für den Normalzustand und den Status ": Hover" anzugeben. –

+1

@Cthulhu Siehe [JSfiddle Demo] (http://jsfiddle.net/SZqkb/1/) Ich habe hinzugefügt. –

0

Sie haben :hover falsch verstanden; Es sagt, dass die Maus über einem Gegenstand ist, anstatt dass die Maus gerade den Gegenstand betreten hat.

Sie könnten dem Selektor Animationen hinzufügen, ohne :hover, um den gewünschten Effekt zu erzielen.

Transitions ist eine bessere Option: http://jsfiddle.net/Cvx96/

+0

Ihre Geige führt nicht zum gewünschten Ergebnis. –

0

Das Gegenteil von :hover scheint :link zu sein.

(edit: technisch nicht eine entgegengesetzte, weil es vier Selektoren :link, :visited, :hover und :active Fünf wenn Sie :focus umfassen..)

Zum Beispiel, wenn .button:hover{ text-decoration:none } eine Regel definieren, die unterstrichenen auf eine Schaltfläche zu entfernen, Die Unterstreichung wird angezeigt, wenn Sie in einigen Browsern den Knopf loslassen. Ich habe dieses Problem behoben mit .button:hover, .button:link{ text-decoration:none }

nur Dies ist natürlich für Elemente arbeitet, die tatsächlich Links sind (haben href Attribut)

+0

Ihre Daten sind nicht korrekt. ': link' wählt einfach Links, so einfach. Sehen Sie hier die Definition von ': link': https://developer.mozilla.org/en-US/docs/Web/CSS/%3Alink – Cthulhu

+0

@ Strive55 Ahhh, danke, das macht Sinn. Der von Ihnen angegebene Link besagt: "Um Links richtig zu formatieren, müssen Sie die Linkregel vor die anderen setzen, wie in der LVHA-Reihenfolge definiert:: link -: visited -: hover -: active." Wenn ich es richtig verstehe, bedeutet das, dass wenn keiner der anderen Selektoren angewendet wird (: visited,: hover oder: active), dann: link ist derjenige, der zutrifft. Nicht technisch ein Gegenteil, denn es gibt 4, aber es funktioniert immer noch – scripter

0

Obwohl hier Antworten ausreichend sind, glaube ich wirklich W3Schools Beispiel zu diesem Thema ist sehr einfach (es räumte die Verwirrung (für mich) sofort auf).

Verwenden Sie den :hover Wähler den Stil einer Taste zu ändern, wenn Sie die Maus über sie bewegen.

Tipp: Verwenden Sie die Übergangsdauer Eigenschaft, um die Geschwindigkeit von den "Hover-Effekt" zu bestimmen:

Beispiel

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

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

Zusammengefasst für Übergänge, wo Sie das wollen " "Enter" und "Exit" -Animationen sind identisch, Sie müssen die Übergänge auf dem Hauptselektor .button anstelle des Hover-Selektors .button:hover verwenden. Bei Übergängen, bei denen die Animationen "Enter" und "Exit" unterschiedlich sein sollen, müssen Sie verschiedene Übergänge zwischen Main Selector und Hover Selector angeben.