“Runde Ecken” und Schlagschatten mit CSS3

Langsam aber doch wächst die Unterstützung für die neuen Features, die CSS3 bringen wird. Immer mehr Browser unterstützen in ihrer aktuellsten Version einige Teile der CSS3-Spezifikation, die noch nicht vom W3C abgesegnet wurde.

Browserspezifische Erweiterungen

Die Hersteller können browserspezifische Erweiterungen vornehmen, indem sie die Eigenschaften mit einem Präfix versehen. Die folgende Tabelle zeigt die Präfixe der gängigen Browser:

Präfix Browser Beispiel
-khtml- Konqueror -khtml-border-radius
-moz- Gecko-basierte Browser, z.B. Firefox -moz-box-shadow
-ms- Internet Explorer -ms-filter
-o- Opera -o-background-size
-webkit- Webkit-basierte Browser, z.B. Google Chrome oder Safari -webkit-border-radius

Browser müssen CSS-Eigenschaften, die sie nicht verstehen, ignorieren. Viele Hersteller verwenden deshalb Präfixe, um einen Teil der CSS3-Features schon jetzt zu unterstützen.

“Runde Ecken”

Mit CSS3 können “runde Ecken” realisiert werden, ohne das HTML-Markup zu beeinflussen. Die dafür notwendige Eigenschaft heißt border-radius. Unterstützt wird diese Eigenschaft bisher von Firefox (-moz-border-radius), Webkit-basierten Browsern wie Google Chrome oder Safari (-webkit-border-radius) und Konqueror (-khtml-border-radius).

Ein Element kann so ganz einfach mit runden Ecken versehen werden:

#myBox {
    -webkit-border-radius: 10px;
    -khtml-border-radius: 10px;
    -moz-border-radius: 10px;
    border-radius: 10px;
}

Um nur eine der Ecken abzurunden, definiert CSS3 die Eigenschaften border-top-left-radius, border-top-right-radius, border-bottom-right-radius und border-bottom-left-radius. Firefox schert an dieser Stelle aus: -moz-border-radius-topleft, -moz-border-radius-topright, -moz-border-radius-bottomright und -moz-border-radius-bottomleft.

#myBox {
    -webkit-border-top-left-radius: 10px;
    -webkit-border-top-right-radius: 10px;
    -khtml-border-top-left-radius: 10px;
    -khtml-border-top-right-radius: 10px;
    -moz-border-radius-topleft: 10px;
    -moz-border-radius-topright: 10px;
    border-top-left-radius: 10px;
    border-top-right-radius: 10px;
}

Schlagschatten

Mit CSS3 kann eine Box mit Schlagschatten versehen werden. Dafür gibt es die Eigenschaft box-shadow:

#myBox {
    -webkit-box-shadow: 10px 10px 5px #cefa42;
    -moz-box-shadow: 10px 10px 5px #cefa42;
    box-shadow: 10px 10px 5px #cefa42;
}

Diese CSS-Eigenschaft benötigt 4 Angaben:

  • Die ersten zwei Angaben bestimmen den horizontalen und vertikalen Offset des Schlagschattens. Positive Werte bedeuten, dass der Schatten rechts oder oben der Boxen positioniert wird, negative Werte positionieren den Schatten links bzw. unter der Box.
  • Die dritte Angaben definiert, wie scharf der Schatten dargestellt werden soll. Je höher der Wert, desto verschwommer stellt der Browser den Schatten dar. Negative Werte sind an dieser Stelle nicht erlaubt.
  • Der letzte Parameter gibt die Farbe des Schattens an.

Und was ist mit dem IE?

Der Internet Explorer unterstützt selbst in der Version 8 keine der oben genannten CSS3-Features. Auch die aktuelle Version von Opera bietet keine Unterstützung für diese Effekte.

Wenn man damit leben kann, dass Benutzer fortschrittlicher Browser ein schöneres Layout sehen als die Benutzer des Internet Explorers oder des Opera-Browsers, kann man die oben genannten CSS3-Features ohne Probleme nutzen. Will man Boxen mit Schlagschatten haben und darf der Schatten ruhig eine scharfe Begrenzung haben, kann man eine Microsoft-proprietären Filter einsetzen:

#myBox {
    -ms-filter:"progid:DXImageTransform.Microsoft.DropShadow(color=#333333, offx=2, offy=2)";
    filter:progid:DXImageTransform.Microsoft.DropShadow(color=#333333, offx=2, offy=2);
}

Internet Explorer-Versionen vor 8 verstehen nur die untere Zeile. Ab IE 8 sollte der Filter mit dem herstellerspezifischen Präfix versehen werden. Dann muss der Wert in Anführungszeichen stehen.

Hier gibt’s ein Beispiel für diese Technik.

Die Box sieht in Firefox 3.5.2 so aus:

box in firefox 3.5

Und so sieht die gleiche Box im Internet Explorer 8 aus:

box in ie 8

Wenn auch das keine Option ist, bleiben nur mehr die konventiellen Methoden für “runde Ecken” und Schlagschatten.

Dieser Eintrag wurde veröffentlicht in Web-Entwicklung und getagged , . Bookmarken: Permanent-Link. Kommentieren oder ein Trackback hinterlassen: Trackback-URL.

9 Kommentare

  1. Erstellt am 1. September 2009 um 21:43 | Permanent-Link

    Guter Artikel. Den Microsoft-proprietären Filter für Schlagschatten kannte ich noch nicht. Danke!

    Zur Info: Der heute erschienene Opera 10 kennt leider immer noch kein border-radius und box-shadow.

  2. Erstellt am 19. September 2009 um 22:46 | Permanent-Link

    schon traurig das der IE8 das immer noch nicht kann…

  3. Erstellt am 9. November 2009 um 12:53 | Permanent-Link

    Cool, das mit dem Schatten wusste ich auch noch nicht. Hab übrigens aus Gewohnheit 4 Parameter mit px-Angaben eingegeben. Über den vierten Parameter kann man noch die Größe des Schattens einstellen.

  4. Erstellt am 2. März 2010 um 22:08 | Permanent-Link

    Gute Nachricht: Opera 10.5 ist heute erschienen und der kann versteht nun border-radius und box-shadow und das sogar ohne browserspezifisches Präfix.

  5. Erstellt am 22. März 2010 um 9:53 | Permanent-Link

    Schöner Artikel, danke dafür!
    Es ist einfach sehr schade, dass die Browserentwicklung so uneinheitlich ist. Für mich als Webdesigner ist es sehr aufwändig, immer die Altlasten des IE mit sich rumzutragen (und rumzuärgern).
    Für alle, die mit mir leiden: Vor Kurzem habe ich gelesen, dass die neue IE Version 9 eine sehr vorbildliche CSS3 Unterstützung bieten soll.
    Viele Grüße, Stefan

  6. Erstellt am 22. März 2010 um 11:56 | Permanent-Link

    Herzlichen Dank für Ihre Hinweise und vor allem, dass Sie den Code öffentlich zur Verfügung stellen. Hiermit konnte mir bei einem großen Problem zur Webdarstellung geholfen werden. Ach ja, lt. Microsoft ist die entsprechende Darstellung beim IE 9 möglich. Nur mit der Einschränkung, dass IE 9 nur für Vista und Windows 7 verfügbar ist. Aber wir wollen die Hoffnung nicht aufgeben!

  7. Erstellt am 4. April 2010 um 16:29 | Permanent-Link

    Danke für die Hinweise werd wohl öfter zurück kommen um sie nochmal nachzuslesen ^^

    Ich wollte nur anmerken, dass der Opera in der nun aktuellen Version (ich benutze 10.51) die oben genannten Funktionen über die Optionen border-radius: ; und box-shaddow: ; unterstützt.

    MfG Matthias Hennig

  8. Erstellt am 27. Juli 2010 um 8:29 | Permanent-Link

    Super Seite. Ich habe sie mir direkt zu meinen Favoriten gelegt. Jedes Mal wenn ich runde Ecken brauche komme ich hierher.

    Salu2 MXWorker

  9. monkey_ffm
    Erstellt am 6. August 2010 um 11:16 | Permanent-Link

    Kurz und sachlich. Vielen Dank dafür :)

3 Trackbacks

  1. [...] box-shadow Schlagschatten für Boxen zu gestalten (Einzelheiten hierzu siehe im Blogbeitrag ““Runde Ecken” und Schlagschatten mit CSS3” von Andreas [...]

  2. [...] hatte die CSS3-Eigenschaft border-radius für runde Ecken auch ohne Präfix, allerdings dort fälschlicherweise ohne Einschränkung auf die oberen Ecken definiert. [...]

  3. [...] Und siehe da: Endlich sieht man die CSS3-Eigenschaften [...]

Ihr Kommentar

Ihre E-Mail wird niemals veröffentlicht oder verteilt. Benötigte Felder sind mit * markiert

*
*

Du kannst diese HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">