Experimente mit der CSS-Eigenschaft box-shadow

20. Mai 2010 - XHTML / CSS - 6 Kommentare

Experimente mit der CSS-Eigenschaft box-shadow

CSS3 wird ein Segen für Webdesigner und vor allem -entwickler. Mit der CSS-Eigenschaft box-shadow lassen sich ohne jede Grafik Schatten um Block-Level-Elemente werfen. Wer jedoch gleiche Darstellung in alles Browsern anstrebt, sollte box-shadow mit Vorsicht genießen. Hier ein paar Experimente.

CSS-Eigenschaft box-shadow

Neben dem bereits vorgestellten text-shadow gibt es auch einen CSS-Befehl der uns Schatten um Block-Level-Elemente (z. B. div) werfen lässt. Die CSS3-Eigenschaft box-shadow.

Ich sag’s am besten gleich. Der IE spielt hier nicht mit! In einem gewissen Rahmen lässt auch dieser sich den Boxschatten aufzwingen, jedoch wird dieser weitaus weniger schön gerendert.

Aber auch die Webkit-Fraktion (Safari/Chrome) und der Firefox spielen nur mit den Prefixen -webkit bzw. -moz mit. Wer also auf CSS-valides Entwickeln pocht, kann das Weiterlesen ab sofort einstellen.

Sprungmarken

Die Schreibweise

.shadow {
    -moz-box-shadow: 2px 2px 2px 2px #eee;
    -webkit-box-shadow: 2px 2px 2px 2px #eee;
    box-shadow: 2px 2px 2px 2px #eee;
    /* Versatz links - Versatz oben - Unschärfe - Schattenradius - Farbe */
}

Bemerkung:
Der erste Wert von box-shadow gibt den Versatz des Schattens von links an, der zweite die Verrückung nach unten, der dritte Wert den Grad der Unschärfe des Schattens, der optionale vierte Wert bestimmt den Schattenradius und die letzte Angabe ist der Hex-Code der gewünschten Farbe des Schattens.

Beispiele einfacher Boxschatten

Mit box-shadow lassen sich ohne jegliche Grafiken verblüffende Effekte erzeugen.

Beispiel für einen grauen Boxschatten mit 2 Pixel horizontalem und vertikalem Versatz und 2 Pixel Schattenunschärfe
Das CSS dazu
-moz-box-shadow: 2px 2px 2px #666;
-webkit-box-shadow: 2px 2px 2px #666;
box-shadow: 2px 2px 2px #666;

Allein diese Parameter versprechen schon eine unheimliche Vielfalt, um Block-Elemente in unseren Webdesigns plastischer erscheinen zu lassen.

Beispiel für einen schwarzen Boxschatten mit 1 Pixel horizontalem und vertikalem Versatz ohne Schattenunschärfe
Das CSS dazu
-moz-box-shadow: 1px 1px 0px #000;
-webkit-box-shadow: 1px 1px 0px #000;
box-shadow: 1px 1px 0px #000;

Auch wenn es hier noch rudimentär erscheint. Mit dem Spiel der Offsets (Versätze), dem Blur (Unschärfe) und der Farbe lässt sich sehr leicht Perspektive erzeugen.

Beispiel für einen schwarzen Boxschatten ohne Versatz, 2 Pixel Schattenunschärfe und einem weißen Rand
Das CSS dazu
-moz-box-shadow: 0px 0px 2px #000;
-webkit-box-shadow: 0px 0px 2px #000;
box-shadow: 0px 0px 2px #000;
border: 1px solid #fff;

In Kombination mit dem normalen border lassen sich perspektivisch ausgefeiltere Ergebnisse erzielen.

Beispiel für einen hellgrauen Boxschatten mit 5 Pixel negativem horizontalen und vertikalen Versatz und starker Unschärfe
Das CSS dazu
-moz-box-shadow: -5px -5px 5px #ddd;
-webkit-box-shadow: -5px -5px 5px #ddd;
box-shadow: -5px -5px 5px #ddd;

Negativer Versatz ist ebenfalls möglich. Damit können wir die Lichtquelle und somit den Schatten beliebig steuern.

Beispiele innerer Boxschatten

Die CSS-Eigenschaft box-shadow hat einen weiteren interessanten Parameter. Mit der Angabe inset können Boxschatten auch nach innen dargestellt werden.

Beispiel für einen inneren Boxschatten mit 2 Pixel horizontalem und vertikalem Versatz und 5 Pixel Schattenunschärfe
Das CSS dazu
-moz-box-shadow: inset 2px 2px 5px #000;
-webkit-box-shadow: inset 2px 2px 5px #000;
box-shadow: inset 2px 2px 5px #000;

Der innere Boxschatten lässt Elemente perspektivisch nach hinten setzen. Die Box erscheint somit wie eingestanzt.

Beispiel für einen inneren Boxschatten ohne Versatz und 10 Pixel Schattenunschärfe
Das CSS dazu
-moz-box-shadow: inset 0px 0px 10px #fff;
-webkit-box-shadow: inset 0px 0px 10px #fff;
box-shadow: inset 0px 0px 10px #fff;

Wenn man der Versatz des box-shadow auf 0 setzt, wird der Schatten gleichmäßig um das Element gelegt. Das gilt auch für den äußeren Schatten.

Beispiele für Boxschatten mit Radius

Ein vierter Parameter von box-shadow lässt uns den Schattenradius gesondert festlegen. Wie in diesen Beispielen zu sehen, verwende ich einen border-radius von 5px. Der Schattenradius kann ein anderer sein.

Beispiel für einen blauen Boxschatten mit 5 Pixel horizontalem und vertikalem Versatz, 10 Pixel Unschärfe und 10px Schattenradius
Das CSS dazu
-moz-box-shadow: 5px 5px 10px 10px #000fff;
-webkit-box-shadow: 5px 5px 10px 10px #000fff;
box-shadow: 5px 5px 10px 10px #000fff;

Mit dem vierten Parameter lässt sich der Schattenradius erhöhen.

Beispiel für einen gelben Boxschatten ohne Versatz, 2 Pixel Unschärfe und 2px Schattenradius
Das CSS dazu
-moz-box-shadow: 0px 0px 2px 2px yellow;
-webkit-box-shadow: 0px 0px 2px 2px yellow;
box-shadow: 0px 0px 2px 2px yellow;

Auch ein kleinerer Schattenradius lässt sich einstellen.

Beispiele mehrfacher Boxschatten

Die Möglichkeit wie auch bei text-shadow mehrere Schatten zu kombinieren habe ich bei Peter Kröner entdecken können. In seinem Beispiel kombiniert er vier verschiedenfarbige Boxschatten auf einmal.

Beispiel für mehrfache Boxschatten in verschiedenen Farben und unterschiedlichen Versätzen
Das CSS dazu
-moz-box-shadow: 8px 8px 8px red, -8px 8px 8px green, 8px -8px 8px blue, -8px -8px 8px yellow;
-webkit-box-shadow: 8px 8px 8px red, -8px 8px 8px green, 8px -8px 8px blue, -8px -8px 8px yellow;
box-shadow: 8px 8px 8px red, -8px 8px 8px green, 8px -8px 8px blue, -8px -8px 8px yellow;

Dieses Gebilde ist grafisch sicher optimierbar, bildet aber hervorragend die Möglichkeiten von box-shadow ab.

box-shadow im IE (Internet Explorer)

Mit dem shadow filter lassen sich, wenn auch wesentlich eingeschränkter, Boxschatten im Internet Explorer darstellen. Unseren Boxschatten könnten wir wie folgt erweitern:

Beispiel für Boxschatten mit dem shadow filter für unseren Freund den IE
Das CSS dazu
-moz-box-shadow: 1px 1px 3px #666;
-webkit-box-shadow: 1px 1px 3px #666;
box-shadow: 1px 1px 3px #666;
filter:progid:DXImageTransform.Microsoft.Shadow(strength=3,color=#666666,direction=135);

Hier die Ansicht im IE

Das ist nicht sonderlich schön und noch weniger valide, aber manchem mag es zumindest eine kleine Erleichterung sein und besseres ist der gemeine IE-Nutzer eh nicht gewöhnt.

Fazit

Wie bereits in der Einleitung gesagt, mit der CSS-Eigenschaft box-shadow sollte man, wenn einem Browserkompatibilität am Herzen liegt, vorsichtig umgehen. Aber gerade mit der Lösung für den IE finde ich den zurückhaltenen Einsatz des Boxschattens durchaus okay.

Relevante Links

Autor

Moin, ich bin Simon und ehemaliger Betreiber dieses Blogs.

RSS abonnieren

und so weiter...

Kommentare

  • Christian - am 20. Mai 2010 - Antworten

    IE…. was war das doch gleich? ;-)

    Auch Microsoft wird – vermutlich mit der üblichen Verspätung – merken, dass ihr Internetreittier lahmt und es entsprechend wieder auf Trab bringen. Wahrscheinlich wird der IE dann aber nur noch ein Browser von “vielen” sein. Und das ist auch gut so, die Chancen dann nicht mehr für einen Browser Extrawürste braten zu müssen stehen dann gut.

  • Klaus - am 8. Juni 2010 - Antworten

    Ich benutze seit dem Start meines Blogs für die Artikel den inneren Schatten und halte das für eine gelungene Variante.
    Im IE werden halt die Artikel mit einem geraden Rand ohne Schatten dargestellt, aber das passt trotzdem.
    Und ich denke der Leser der IE benutzt wird das nicht sonderlich stören – hoffentlich?!

    Herzliche Grüße
    Klaus

  • Einer wie Keiner - am 6. Juli 2010 - Antworten

    Hallo Simon,

    du solltest die Reihenfolge deiner Deklarationen überdenken. Die standardkonforme Schreibweise sollte immer zuletzt stehen, da im Browser beide Implementierungen vorhanden sein können und die dem Standard entsprechende sollte man immer bevorzugen.

    Viele Grüße

  • Simon Harte - am 23. September 2010 - Antworten

    Vielleicht auch interessant zu wissen, sobald man den Filter für IE auf eine Box mit Links darin anwendet (wie z.B. einem Hauptmenü), sind diese nicht mehr anklickbar und reagieren nicht auf das Mouseover-Event.

Trackbacks

Deine Meinung