Mouseover Buttons mit CSS ohne Nachladen
Tutorial von Stefan Trost | Letztes Update am 30.01.2023 | Erstellt am 13.06.2012
Verschiedene Zustände eines Buttons wie der Normalzustand und der Mousover-Zustand werden oftmals mit JavaScript realisiert: Wir haben zwei Bilder und je nach Zustand des Buttons wird durch JavaScript gesteuert eines der Bilder geladen.
Durch diese Lösung ergeben sich drei unschöne Dinge: Das Laden der Buttons dauert ein wenig, es ergibt sich eine kleine Ladepause; wir laden zwei Bilder, das sind unnötig viele HTTP-Anfragen an den Server und einige Nutzer haben JavaScript deaktiviert und die sehen gar nichts von unserer Mühe.
In diesem Tutorial möchte ich euch daher einen Trick zeigen, wie wir mit nur einem Bild und nur mit der Hilfe von CSS ohne JavaScript dasselbe Ergebnis bekommen und all die beschriebenen Probleme hinter uns lassen.
Das Prinzip
Das Prinzip dabei ist in dieser Illustration verdeutlicht:
Unser Bild: Normaler Button: Mouseover: ------- ------- --ABC-- --ABC-- ------- ------- ------- XX-------XX XX-------XX --DEF-- XX--ABC--XX XX--DEF--XX ------- XX-------XX XX-------XX ------- --DEF-- -------
Links sehen wir unser Bild, dass wir als Hintergrund für den Button verwenden möchten. Im Normalzustand soll "ABC" auf dem Bild stehen, im Hover-Zustand soll "DEF" auf unserem Button stehen. Auf unserem Bild haben wir einfach beide Button-Zustände untereinander auf ein Bild gesetzt.
In der Mitte sehen wir schließlich unseren normalen Button. Der Trick ist dabei, dass der Button kleiner ist als das Bild. Es wird also nur die obere Seite mit dem "ABC" auf unserem Button sichtbar. Der Rest bleibt verborgen. Die Ränder unseres Buttons sind mit "XX" gekennzeichnet.
Im Mouseover Status verschieben wir nun das Bild nach oben, so dass die andere Seite des Bildes unsichtbar wird. Zwischen den mit "XX" gekennzeichneten Rändern ist nun das "DEF" sichbar und der obere Teil des Bildes verborgen.
Das CSS
Übersetzen wir diese Überlegungen in CSS erhalten wir:
#button { background: url("pic.png") no-repeat 0px 0px; height: 25px; width: 100px; padding: 0; margin: 0; } #button:hover { background-position: 0px -25px; }
Zunächst definieren wir unseren Button, den wir hier "button" nennen mit einer Größe von 25 x 100 Pixeln. Als Hintergrundbild definieren wir das "pic.png" und geben als Hintergrund-Position "0px 0px" an. Das bedeutet, dass als Hintergrund der Ausschnitt von "pic.png" verwendet wird, der oben links ab den Koordinaten 0/0 zu sehen ist. Alles andere wird abgeschnitten. Und genau in dieser Ecke sollte das Bild für unseren Button sitzen, das wir als Normalzustand verwenden möchten.
Als nächstes definieren wir eine CSS-Regel für den Hover-Zustand, das heißt, wenn die Maus über den Button fährt. Hier benennen wir eine andere Background-Position und zwar "0px -25px". Damit wird beim Überfahren mit der Maus der Ausschnitt des Bildes angezeigt, der sich 25 Pixel unterhalb des oberen Bildausschnitts befindet. Und genau dort sollte das Bild für den Hover-Zustand auf unserem Bild platziert werden.
Natürlich sind dies nur Beispiele. Das Bild für den Ursprungsbutton kann genauso gut bei einer Position von "127px 27px" liegen und der Button eine andere Größe haben. Es ist nur darauf zu achten, das die Größen und Angaben zusammen passen.
Weitere Überlegungen
Dieses Vorgehen nennt man die Verwendung von CSS-Sprites. Theoretisch können wir nun auch andere Buttons oder sonstige Bilder unserer Website in ein einzelnes großes Bild packen und dann durch die Eigenschaften in background-position immer nur Ausschnitte davon beziehungsweise die Stelle des Bildes anzeigen, die wir gerade bei einem bestimmten Element sehen möchten.
Damit Laden wir nur einmal ein Bild herunter, dass dann in unserem Browser Cache ist und immer wieder verwendet werden kann. Diese eine Anfrage ist viel performanter als jedes mal eine Vielzahl von Bildern mit einer ebenso großen Anzahl an HTTP Requests herunterzuladen.
Noch performanter ist es natürlich, gleich ganz auf Bilder zu verzichten und Buttons nur mit reinem CSS zu designen. Daher sollte diese Methode nur verwendet werden, wenn wir wirklich ein Bild benötigen. Für Farbverläufe oder andere Designs, die sich auch einfach mit CSS realisieren lassen, sollten wir kein Bild verwenden.
Über den Autor
Software von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen
Ähnliche Themen
CSS-Stylesheets in HTML einbinden
Tutorial | 0 Kommentare
Bilder, CSS, JS und Seiten neu laden trotz Browser-Cache
Tipp | 2 Kommentare
Website Performance: Javascript und CSS komprimiert ausliefern und Ladezeiten verkürzen
Tutorial | 0 Kommentare
Windows Batch Script: Computer herunterfahren
Tutorial | 2 Kommentare
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
jQuery: CSS Stylesheet Switcher
Tutorial | 1 Kommentar
MySQL: Zeilenumbrüche in MySQL
Tipp | 0 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.