Ein Hover-Zustand für ein Element hinzuzufügen ist verdammt einfach. Nehmen wir als Beispiel eine Opazitätsänderung.
div {
opacity: 1.0;
}
div:hover {
opacity: 0.5;
}
Aber was, wenn wir wollen, dass dieser Hover-Zustand für *alles außer* dem Element gilt, das gerade angeklickt wird? (z.B. andere benachbarte Geschwister-Divs)
Nehmen wir dieses grundlegende HTML an.
<section class="parent">
<div></div>
<div></div>
<div></div>
</section>
Wir wenden die aktuellen CSS-Eigenschaften auf alle Kinder des Elternteils an, wenn sich das Elternteil im Hover-Zustand befindet.
.parent:hover > div {
opacity: 0.5;
}
Dann, wenn das Elternteil gehovert wird *und* das einzelne Div gehovert wird, erhöhen wir die Opazität wieder und erzielen so den gewünschten Endeffekt.
.parent:hover > div:hover {
opacity: 1.0;
}
Reale Welt?
Eine ähnliche Sache gibt es in der Twitter für Mac App bei einzelnen Tweets.

Demo
Diese Idee kann auf mehrere Ebenen ausgedehnt werden. Hier ist ein Beispiel für drei „Listen“. Alle Listenelemente haben im normalen Zustand volle Opazität, aber wenn man über die Listen fährt, ist die aktuell gehoverte Liste etwas undurchsichtiger als die anderen, und das aktuell gehoverte Listenelement ist vollkommen undurchsichtig.
Demo anzeigen Dateien herunterladen
Und ja, alte Browser-Bekannte verstehen :hover nur bei Ankerlinks. Wenn es auf die Mission ankommt, verwenden Sie JavaScript, um mouseenter-Ereignisse darauf zu erkennen und Klassennamen anzuwenden/zu entfernen.
Update August 2012: Michelle Eaton schreibt mit diesem JavaScript, um die Aufgabe zu erledigen, wenn Sie es unbedingt brauchen.
$("#all ul li").hover(function() { // Mouse over
$(this).siblings().stop().fadeTo(300, 0.6);
$(this).parent().siblings().stop().fadeTo(300, 0.3);
}, function() { // Mouse out
$(this).siblings().stop().fadeTo(300, 1);
$(this).parent().siblings().stop().fadeTo(300, 1);
});
Immer toll, mehr Wissen zu haben! Ich habe vor einiger Zeit etwas Ähnliches gemacht, aber nicht die gleichen Selektoren verwendet; Social Media Icons schön mit CSS3 anzeigen. Danke Chris, dass du eine weitere Lösungsart für dieses Problem gezeigt hast!
Ups – meine Entschuldigung! Deine Demo geht sogar noch eine Ebene tiefer, statt der „Basis“-Form. Noch besser!
Hat mir die größte IDEE gegeben!!
Liebe das, danke.
Chris, weißt du, dass deine Website nicht gut dargestellt wird? Zumindest unter meinen Bedingungen (Chromium unter Ubuntu Linux). Ich weiß nicht, ob das auch für andere Betriebssysteme gilt. Bitte überprüfe das, denn es dauert schon lange an und macht mich verrückt.
„Nicht gut dargestellt“ ist etwas vage, nicht wahr? :p
Das ist irgendwie offensichtlich... aber ich liebe, was du auf der Demoseite gemacht hast :-)
Fantastische Demo!
Und habe ich als Einziger Probleme, Dinge zu sehen (Menütext und Text in anderen Bereichen) auf css-tricks?
Nein. Ich habe die gleichen Probleme.
Welchen Browser/welches Betriebssystem verwendest du? Ich hatte noch nie Sichtbarkeitsprobleme.
Es ist ein Chrome-Problem. Nach dem Update auf Version 11 scheint es jetzt in Ordnung zu sein.
Ich verwende Chrome 11 und die „Syntax“-Boxen sind fast unleserlich, und der Text auf den Buttons zeigt an einigen Stellen keine Anzeige.
Ähnliche Probleme. Vielleicht nimmt Chris einige Anpassungen vor?
Ich mache das auf meiner Website. Ähnliche Syntax.
Es ist ein schicker Effekt. Funktioniert nicht in älteren IE-Versionen, aber damit kann ich leben.
Google Page Speed erklärt, dass dies eine „potenziell ineffiziente Verwendung von :hover“ ist, die bekanntermaßen Probleme mit anderen Hover-Effekten auf einigen Seiten verursacht. Am auffälligsten sind IE-Versionen, aber ich habe gesehen, dass sich dies auch auf Performance-Probleme beim Hovern in FF ausgewirkt hat.
Seien Sie gewarnt.
Ich schätze es, dass Sie den Code und eine Demo bereitstellen. Danke!
Das ist ein schöner Beitrag. Er ist wirklich nützlich. Danke, dass Sie Ihre Ideen teilen!
sehr cool, ich mache das plus ein paar weitere CSS-Übergänge für die Navigation auf meiner aktuellen Seite. Ich muss sagen, dass die Verwendung von CSS für Dinge, für die man normalerweise ein Bild verwenden würde, die Ladezeit erheblich verbessert.
Aber gibt es einen Grund, das „:hover“ auf alle Selektoren zu setzen? Ich meine, reicht es nicht, es nur auf das letzte zu setzen, das Sie gehovert haben möchten?
Das stimmt tatsächlich, ich habe einen schnellen Test mit dem Web Developer Toolbar gemacht und diesen Teil reduziert auf
#all:hover a {
opacity: 0.2;
}
#all ul:hover a {
opacity: 0.5;
}
#all ul a:hover {
opacity: 1;
}
Ich habe es aber nur in Firefox ausprobiert, vielleicht ist das eine Lösung für andere Browser.
Das liegt daran, dass wir in diesem Beispiel eine Gruppe von Elementen ändern wollen, die wir *nicht* hovern, während das Element, das wir tatsächlich hovern, gleich bleibt.
Um dies zu tun, müssen wir *alle* Elemente in der Gruppe ändern (d.h.
#.parent:hover) und dann das Element, das wir tatsächlich hovern (.parent:hover > .item:hover) wieder auf seinen ursprünglichen Wert zurücksetzen.egal; ich sehe, was du meinst.
Es scheint tatsächlich in modernen Browsern zu funktionieren (ich habe es in Fx3.6, Opera11 und Chrome10 ausprobiert).
Als ich dies auf meiner eigenen Website implementierte (das war vor ein paar Jahren), erinnere ich mich, dass ich gezwungen war, die zusätzlichen :hover-Selektoren zu verwenden – ich weiß jedoch nicht mehr, welche Browser sie erforderten.
Genial! Ich werde das definitiv in meiner Website implementieren. Danke!
sehr schöner Beitrag!
Schöner Beitrag! Ich kann immer etwas von dir lernen, danke!
Schön!! Ich werde das sofort verwenden!!
Du hast vielleicht eine mystische Kraft – ich habe gerade danach gesucht, danke Chris!
Vielen Dank! Das ist sauber und einfach!!
Das ist eine wunderbare Idee!!
Fantastische Demo! Einfache Tricks. Ich probiere es aus..
Nützliches Tutorial für mich, danke.
Die Demo ist cool, ich liebe sie. Ich kann es kaum erwarten zu sehen, wie dieses Hovering funktioniert. Danke.
Danke für eine weitere Ergänzung zu meinem CSS-Arsenal.
Ältere Browserversionen verstehen :hover für div, li, etc. nicht. Für diese Browser können Sie ein kleines bisschen JavaScript schreiben, um den Hover-Effekt anzuzeigen.
Ich stimme Ihrem Punkt ebenfalls zu. Das ist cool, aber angesichts der aktuellen Implementierungen durch die Browser würde ich immer noch einen JavaScript-basierten Ansatz bevorzugen, um einen ähnlichen Effekt zu erzielen.
http://www.technobits.net – Neueste Infos, Tipps und Tricks in der Softwareentwicklung.
Vielleicht kann mir jemand helfen. Meine Seite ist wie eine Einkaufszentrum-Karte (wie wenn man zu einem physischen Einkaufszentrum geht und sich das Verzeichnis ansieht) und ich möchte die Opazität einer Gruppe von Geschäften (Klasse) ändern, basierend auf dem Hovern über den Legendeneintrag derselben Klasse. Da man die Geschäfte auf verschiedene Arten suchen und filtern kann, sind die Struktur und Reihenfolge der Geschäfte fließend, aber ich verwende Klassen, um die Hintergrundbilder farblich zu kodieren.
Die Grundstruktur ist unten angegeben. Ich kann die Legende als ein weiteres Div im Einkaufszentrum haben, wenn das hilft, aber die Frage ist:
Kann ich über die Klasse „Schuhe“ in der Legende hovern und „Store_1“ und „Store_4“ (und alle anderen Schuhgeschäfte) basierend auf ihrer Klasse hervorheben?
(Übrigens, wenn Sie das tun können, empfehle ich dringend, einen separaten Blogbeitrag zu verfassen – ich bin sicher, viele Leute wären interessiert.)
<div id="mall_stores">
<div id="store_1" class="shoes">...</div>
<div id="store_2" class="electronics">...</div>
<div id="store_3" class="books">...</div>
<div id="store_4" class="shoes">...</div>
...
</div>
<div id="legend">
<div id="class_1" class="shoes">Schuhe</div>
<div id="class_2" class="electronics">Elektronik</div>
<div id="class_3" class="books">Bücher</div>
</div>
Schauen Sie sich das Konzept hinter Remote Linking an: https://css-tricks.de/remote-linking/
Oder... JavaScript!
Danke Chris, ich werde es mir ansehen. Ich habe versucht, JavaScript zu vermeiden, wenn ich könnte, CSS wäre eleganter und schmerzloser.
Prost!
Hallo;
Okay, ich bin noch ganz am Anfang bei CSS, habe also noch viele Fragen.
Eine davon ist, wofür das „>“ im Code wie hier (von oben) verwendet wird:
.parent:hover > div { opacity: 0.5;} ?
Das „>“ ist der Kind-Selektor. Im von Ihnen verwendeten Beispiel wählt es nur die Div-Tags aus, die Kinder von etwas mit der Klasse „parent“ sind, das gerade gehovert wird.
Es unterscheidet sich vom üblichen „Vorfahre-Nachfahre“-Selektor darin, dass es nur direkte Kinder auswählt, keine Nachfahren weiter unten im Baum.
Ein Selektor wie „div a“ wählt also alle -Tags innerhalb eines aus, aber „div > a“ wählt kein aus, das sich innerhalb eines befindet.
-
Peter Hentges Permalink zum Kommentar#
innerhalb eines
Ah, HTML wird interpretiert. Mein letzter Absatz sollte also lauten:
Ein Selektor wie „div a“ wählt also alle -Tags innerhalb eines aus, aber „div > a“ wählt kein aus, das sich innerhalb eines befindet.
-
Jon Permalink zum Kommentar#
-
Aman Permalink zum Kommentar#
-
Ron Permalink zum Kommentar#
-
Ron Permalink zum Kommentar#
-
Ron Permalink zum Kommentar#
-
Ecoz Labs Permalink zum Kommentar#
-
munky Permalink zum Kommentar#
-
Mark Permalink zum Kommentar#
-
Ramesh V R Permalink zum Kommentar#
-
PS Website Design Ilkley Permalink zum Kommentar#
-
Creative Manner Permalink zum Kommentar#
-
manoj Permalink zum Kommentar#
-
josephhyunkim Permalink zum Kommentar#
-
Tim Permalink zum Kommentar#
-
New Hiker Permalink zum Kommentar#
-
Chris Coyier Permalink zum Kommentar#
-
Petter Permalink zum Kommentar#
-
Prashanth Permalink zum Kommentar#
Dieser Kommentarbereich ist geschlossen. Wenn Sie wichtige Informationen teilen möchten, kontaktieren Sie uns bitte.
innerhalb eines
Ich liebe das! Das ist die Art von Tutorial, die mich dazu bringt, zurückzugehen und etwa 1000 Dinge neu zu gestalten.
Wow, das sieht wirklich cool aus, ich sehe viel Potenzial dafür. Aber das scheint nicht mit Internet Explorer zu funktionieren!
Habe auch bemerkt, dass es mit Netscape nicht funktioniert.
Hey Chris,
wie $(‘every #day > .hour: first’).educateMe(‘http://feeds2.feedburner.com/CssTricks’)
Lass mich keine Worte wie erstaunlich, Liebe oder AAAAAAWSAAAAM* :hover{ so viel Energie, so viel Enthusiasmus, so unglaublich VIEL Zeit für nötige echte soziale Arbeit (->Teilen) – dass es ist (wenn ich zurückdenke, als ich anfing zu lernen, versuchte ständig landete ich auf deiner Seite, nachdem ich etwas gegoogelt hatte…) ! }
Diese Technik findet sich in fast all meinen Blättern. Würde gerne mehr von diesen Tricks sehen -> veröffentlicht auf dieser „prominenten/berühmten“ Seite – dass sie ist! WEIL FireFoxyBaby – dass sie war – gefällt nicht mehr. Also, wenn du noch mehr von diesen „einfachen“ Tricks hast, für die ich normalerweise verwende
if(!$.browser.mozilla) JS
else DANKE!
.a.hover strong: { border:1px solid black; }
.a:hover strong.no_border { border:0; }
.a:hover > strong:first-child:hover { border:1px solid blue; }
c:hover .a:hover > strong:first-child:hover { border:1px solid red; }
Du bist ein Süßer! Deshalb kommen die Leute immer wieder: Du hast kein Tutorial daraus gemacht. :)
Ich würde gerne eines Tages mit dir zusammenarbeiten… meine „eigene“ Website ist gerade offline (aber du siehst die E-Mail-Adresse) – das könnte schön sein, das wäre wirklich schön.
Normalerweise schreibe ich keine Kommentare – zum ersten Mal, fast (dass es ist) -> war müde von leeren Phrasen.
*smash_mag
* hover-on-everything-if
Schöner und nützlicher Artikel. Danke.
schönes Tutorial, aber hast du deine Seite in Chrome getestet?
Schauen Sie sich die CSS3-Pseudoklasse „:not()“ an.
http://www.w3.org/TR/css3-selectors/#negation
Gute Arbeit.
:hover Pseudo hat Probleme mit älteren IE-Versionen.
IE scheißt!
Ausgezeichnet. Konzentriert den Benutzer definitiv auf den Zielbereich – werde das sicherlich in meinem nächsten Website-Projekt verwenden. Danke.
Nein! IE hat einen großen Einfluss auf diese Art von Ansätzen.
Ich kann es in der Bildergalerie verwenden... cool... :)
toller Beitrag.
Das kann man schneller mit :not machen.
div:not(:hover){opacity:0.5}
Oder anhand deiner Demo
#all:hover a:not(:hover) {
opacity: 0.5;
}
Statt
#all:hover ul:hover a {
opacity: 0.5;
}
#all:hover ul:hover a:hover {
opacity: 1;
}
Wir haben das gerade auf New Hiker implementiert und einiges von Ihrem Code verwendet. (Die Social-Media-Icons in der linken Spalte)
Danke für den Tipp!
Sieht gut aus, danke fürs Teilen.
Das hat mir sehr geholfen, danke vielmals, Kumpel :)
Toller Artikel. Wenn es Bilder sind, können wir die anderen Bilder in Graustufen umwandeln.