CSS Sprites – Icons und Hintergründe richtig einbinden

Icons und auch Hintergrundgrafiken sind Bestandteil vieler Layouts. Gerade je größer die Seite wird, desto eher kommen auch gerade Icons zum Einsatz. Auf der anderen Seite möchte man die Anzahl der Dateien, und der Zeilen im Quellcode möglichst gering halten.
Eine gute Möglichkeit die Dateigröße, und die Anzahl der einzelnen Dateien zu verringern ist CSS Sprites.

Sprites stammen aus Zeiten, in denen der verwendete Festplatten- und Grafikspeicher noch sehr begrenzt war. Die Technik kam vor allem bei Computerspielen zum Einsatz. Anstatt für jedes Element ein neues Bild in den Grafikspeicher schreiben zu müssen, wurde durch die Sprites-Technik einfach der dargestellte Bildausschnitt verschoben.
Diese Technik können wir auch im Web hervoragend anwenden. Gerade Grafiken, wie Icons, haben fast immer dieselbe Größe und fressen unnötig Platz auf der Festplatte, da sie gar nicht so groß wie der angelegte Speichersektor sind.
Speichern wir also alle Icons in eine Datei. Als Beispiel habe ich ein paar Icons von FamFam gewählt und zusammen in ein File abgespeichert.

Css Sprites von milkstyle

Nun legen wir im CSS die Klassen für die Icons an. CSS Sprites benötigt zur Darstellung einzelner Icons mehr Code, als bei einzelnen Grafiken nötig wäre. Im Endeffekt rechnet sich diese CSS Sprits, dennoch sollten wir versuchen das CSS so kurz wie möglich zu halten.

 
.icons {
  width:16px;
  height:15px;
}
.icon_fail {
  background:left top;
}
.icon_cart {
  background:-16px top;
}
.icon_glock {
  background:-32px top;
}
.icon_folder {
  background:-48px top;
}
.icon_cake {
  background:-64px top;
}
.icon_car {
  background:-80px top;
}
.icons {
  background-image: url(icons.png);
  background-repeat:no-repeat;
}
 

Vielleicht kann man bereits erahnen, das im CSS passiert. Aber lasst uns gleich weitermachen: Mit der Anzeige. Dazu brauchen wir lediglich ein 1px-großes Gif. Dieses benennen wir als space.gif und binden folgenden Code ein, um ein Icon darzustellen:

 
<img src="space.gif" alt="Icon" class="icons icon_fail" />
 

Angezeigt wird unser Fail-Icon. Gleiches funktioniert natürlich auch mit jeder anderen Klassenkombination.

Das CSS ist auf den ersten Blick etwas unlogisch aufgebaut, und könnt besser geschrieben werden. Es hat allerdings einen Grund, dass ich den obign Aufbau gewählt habe.

Bei der ersten Definition von icons setze ich die Standardwerte wie Breite und Größe. Auch die Definition von vertical-align wäre hier sinnvoll. Es sollte sich dabei nur um Werte handeln, die von bestimmten Icons bzw. Bildern überschrieben werden könnten.
Nach der Definition von icons werden die einzelnen Icons definiert. Anstatt von background hätte man natürlich auch background-position verwenden können. Zumindest die Lesbarkeit hätte das verbessert. Allerdings sparen wir uns für jedes Icon ein -repeat. Bei 6 Icons mag das noch nicht viel sein, aber nehmen wir an, wir binden auf diese Weise 20 Icons ein...
Nach der Definition der einzelnen Icons definieren wir noch das background-image und background-repeat. Die Eigenchaft background können wir an dieser Stelle leider nicht verwenden, da sie die vorigen Positionen überschreiben würde.

Verwendet man in den Icons Alpha-Transparenz kann man mit einer eile Code dem Internet Explorer 6 eine andere Datei zur Verfügung stellen.

Mit CSS Sprites lassen sich nicht nur Icons einbinden. Auch Buttons und allgemein Hintergründe lassen sich so kompakt verpacken.
Die Vorteille sind also:

  • Besser ausgenutzte Dateigrößen
  • Weniger Grafiken und somit weniger Verbindungen zum Server (sind begrenzt)
  • Die Icons sind bereits geladen, sobald eines eingebunden wurde
  • Mit einem Befehl hat man eine IE6 gerechte Version
Ähnliche Beiträge
6 Antworten zu “CSS Sprites – Icons und Hintergründe richtig einbinden”
  1. 1
    andi (am 29. Oktober 2008 um 10:16 Uhr)

    ein space.gif um ein hintergrund per css anzuzeigen… ist das nicht ein bischen unsinnig? ich denke, sobald solche icons benötigt werden, gibt es geeignetere elemente für das hintergrundbild. hinzu kommt, dass screenreader-benutzer keine freude an alt=”icon” haben werden.

  2. 2
    Michael Karl (am 29. Oktober 2008 um 10:28 Uhr)

    @andi

    Natürlich kann man auch ein anderes Element nutzen, um diesem ein Hintergrundbild hinzuzufügen. Das Image-Element eignet sich, in meinen Augen aber am ehesten. Wenn nun im alt- oder im title-Tag nur Icon steht, wurde das Ziel natürlich verfehlt. Ein Posteingang oder Image-Icon ist natürlich beständiger.

    Ein Problem, auf das ich vergessen habe einzugehen ist zudem die Darstellung in mobilen Browsern, bzw. allgemein wenn keine Hintergrundgrafiken geladen werden.
    Gibts halt noch nen Artikel ;-)

  3. 3

    [...] meinem Artikel zur Verwendung von CSS Sprites, habe ich empfohlen, ein transparentes Gif einzubinden, um die Icons im Hintergrund anzuzeigen. Per [...]

  4. 4

    [...] kann und er mir einen solche Datei erstellen kann. (wie an der Beispieldatei im Anhang). Idee zur Optimierung Kennt jemand so einen Tool (wenn es geht free)? Hat jemand einen Vorschlag? Miniaturansicht [...]

  5. 5

    [...] kann und er mir einen solche Datei erstellen kann. (wie an der Beispieldatei im Anhang). Idee zur Optimierung Kennt jemand so einen Tool (wenn es geht free)? Hat jemand einen Vorschlag? Angeh?ngte [...]

  6. 6

    [...] dass beide Themes Last mit sich tragen. Diese könnte vermieden werden. Stichworte sind dabei CSS-Sprites, limitierte HTTP-Requests, CDN und Bildoptimierung. Einen guten Artikel, der auch in diese Richtung [...]




  • RSS
  • milkstyle bei Xing
  • milkstyle bei Twitter
  • milkstyle bei LinkedIn
  • milkstyle bei Mister Wong