Smart Lists: Hover-Effekt ohne Preload

July 13, 2004

Egal ob in Navigationen oder bei einfachen Links — subtile Hover-Effekte helfen dem User zwischen aktiven und inaktiven Elementen zu unterscheiden. Oft wird dabei auf leichte Änderung der Hintergrund- oder Schriftfarbe gesetzt. Doch wie können auch Bilder ohne Javascript-Preload ausgetauscht werden?

Ziel dieses Tutorials

Ziel dieses Tutorials soll es ein, eine Liste mit Links, ähnlich wie im Sidebar von Bartelme Design, zu erstellen. Dabei soll jeder Eintrag über ein Aufzählungszeichen verfügen, welches beim Darüberfahren mit der Maus ausgetauscht werden soll. Zusätzlich wollen wir erreichen, dass das zweite Bild weder beim erstmaligen Hovern nachgeladen wird, was eine störende Verzögerung zur Folge hätte, noch mittels Javascript vorausgeladen werden muss.

Schritt 1

Aufbauend auf dem ersten Teil der „Smart Lists“ Serie erstellen wir in einem ersten Schritt unser HTML-Gerüst, bestehend aus einer einfachen Liste und mehrere Anchor-Tags. Um unsere CSS-Regeln auf diesen spezifischen Bereich anwenden zu können, versehen wir die Liste zusätzlich mit einer eindeutigen Id.

<ul id=“smartList”>
  <li><a href=”#”>Alpha</a></li>
  <li><a href=”#”>Beta</a></li>
  <li><a href=”#”>Gamma</a></li>
  <li><a href=”#”>Delta</a></li>
</ul>

Wiederum entfernen wir über CSS die störenden Aufzählungszeichen und setzen Innen- und Außenabstand (padding und margin) auf „0“. Ein Blick auf das erste Beispiel zeigt das Ergebnis.

Schritt 2

In einem nächsten Schritt definieren wir die Schriftfarbe der Links und entfernen die Unterstreichung mittels text-decoration: none. Anstatt nun das Hintergrundbild dem Listenelement zuzuweisen, werden wir es in diesem Fall dem Anchor zuweisen. Dies ist notwendig, da wir mit der Pseudo-Klasse „:hover“ arbeiten werden, welche im IE nur auf Anchor-Tags angewandt werden kann — in allen anderen Browser werden Pseudo-Klassen bei allen Elementen interpretiert. Nachdem wir nun den entsprechenden Wert für den linken Innenabstand (padding-left) gesetzt haben, sieht nun unsere Liste bereits ganz ansehnlich aus.

Schritt 3

Bisher unterscheidet sich unsere Liste nicht maßgeblich von jener, welche wir im ersten Teil erstellt haben — es fehlt also noch der Hover-Effekt. Ein naheliegender Ansatz wäre, dafür drei unterschiedliche Bilder zu erstellen und diese den einzelnen Elementen zuzuweisen. Dies hätte jedoch den Nachteil, dass nicht alle Bilder beim Öffnen der Seite geladen werden würden — um dies zu verhindern müssten wir einen Preloader mittels Javascript erstellen. Da wir jedoch die Liste gänzlich ohne Scripts erstellen wollen, müssen wir auf eine andere Technik zurückgreifen.

Das Hintergrundbild enthält beide Stati

Der Trick dabei ist, alle verwendeten Stati in eine einzige Datei (siehe Abbildung) zu packen und mit der CSS-Property background-position an die derzeit benötigte Position zu springen. In diesem Fall weisen wir mit Hilfe der Pseudo-Klasse „:hover“ dem Hintergrundbild die Postion von -200px zu. Der vertikale Wert bleibt weiterhin auf 50% gesetzt, wodruch das Bild auch bei unterschiedlichen Schriftgrößen sets vertikal zentriert dargestellt wird. Beispiel 3 zeigt die fertige Liste in Aktion.

Bei :hover wird die Position des Bildes verändert

2 comments

Das war also der zweite Teil der Serie; und falls ihr einen Vorschlag für Teil drei habt — bitte hier posten…

Wolfgang

Nachtrag: Bei IE/Win kann es aufgrund eines Bugs mitunter zu ungewolltem Flackern kommen. Dies tritt dann auf, wenn die Caching-Einstellungen nicht auf „automatisch“ gesetzt sind. Dies veranlasst IE, das Bild beim Darüberfahren stets neu zu laden, was, abhängig von Prozessorleistung und Internetbandbreite, zu diesen mehr oder weniger bemerkbaren Flacker-Effekten führt — andere Browser sind davon nicht betroffen. -----

Wolfgang

Commenting is not available in this channel entry.