The CSS Podcast – 017: Schatten
Angenommen, Sie haben ein Design erhalten, das Sie erstellen sollen. In diesem Design ist ein Bild eines T-Shirts zu sehen, das ausgeschnitten ist und einen Schatten hat. Der Designer erklärt Ihnen, dass das Produktbild dynamisch ist und über das Content-Management-System aktualisiert werden kann. Daher muss auch der Schatten dynamisch sein. Anstelle eines T-Shirts kann das Bild auch ein Visier, Shorts oder ein anderes Kleidungsstück sein. Wie machen Sie das mit CSS?
CSS bietet die Properties box-shadow
und text-shadow
. Da es sich bei dem Bild jedoch nicht um Text handelt, können Sie text-shadow
nicht verwenden.
Wenn Sie box-shadow
verwenden, wird der Schatten auf dem umgebenden Feld und nicht um das T-Shirt herum angezeigt.
Glücklicherweise gibt es eine andere Option: den Filter drop-shadow()
.
So können Sie genau das tun, was der Designer verlangt hat.
Es gibt viele Optionen für Schatten in CSS, die jeweils für einen anderen Anwendungsfall entwickelt wurden.
Rahmenschatten
Mit der Property box-shadow
können Sie dem Feld eines HTML-Elements Schatten hinzufügen.
Sie funktioniert für Block- und Inline-Elemente.
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
Die Werte für box-shadow
sind so angeordnet:
- Horizontaler Offset: Mit einer positiven Zahl wird das Element nach links und mit einer negativen Zahl nach rechts verschoben.
- Vertikaler Versatz: Mit einer positiven Zahl wird das Element von oben nach unten verschoben, mit einer negativen Zahl von unten nach oben.
- Weichzeichnerradius: Je größer der Wert, desto unschärfer ist der Schatten. Ein kleiner Wert ergibt einen schärferen Schatten.
- Ausbreitungsradius (optional): Mit einem höheren Wert wird der Schatten größer und mit einem niedrigeren Wert kleiner. Wenn er auf „0“ gesetzt ist, hat er dieselbe Größe wie der Unkenntlichmachungsradius.
- Farbe: Beliebiger gültiger Farbwert. Wenn dies nicht definiert ist, wird die berechnete Textfarbe verwendet.
Wenn Sie einen Schatten als Innen- statt als Standard-Außenschatten festlegen möchten, fügen Sie das Keyword inset
vor den anderen Properties hinzu.
/* Outer shadow */
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
/* Inner shadow */
.my-element {
box-shadow: inset 5px 5px 20px 5px #000;
}
Mehrere Schatten
Mit box-shadow
können Sie beliebig viele Schatten hinzufügen.
Fügen Sie dazu eine durch Kommas getrennte Sammlung von Wertesätzen hinzu:
.my-element {
box-shadow: 5px 5px 20px 5px darkslateblue, -5px -5px 20px 5px dodgerblue,
inset 0px 0px 10px 2px darkslategray, inset 0px 0px 20px 10px steelblue;
}
Eigenschaften, die sich auf den Schatten auswirken
Wenn Sie Ihrem Feld ein border-radius
hinzufügen, wirkt sich das auch auf die Form des Schattens aus.
Das liegt daran, dass CSS einen Schatten basierend auf der Form des Felds erzeugt, als würde Licht darauf gerichtet.
.my-element {
box-shadow: 0px 0px 20px 5px darkslateblue;
border-radius: 25px;
}
Wenn sich Ihr Feld mit box-shadow
in einem Container mit overflow: hidden
befindet, überschreitet der Schatten diesen Überlauf ebenfalls nicht.
<div class="my-parent">
<div class="my-shadow">My shadow is hidden by my parent.</div>
</div>
.my-parent,
.my-shadow {
width: 250px;
height: 250px;
}
.my-shadow {
box-shadow: 0px 0px 20px 5px darkslateblue;
}
.my-parent {
overflow: hidden;
}
Textschatten
Das Attribut text-shadow
ist dem Attribut box-shadow
sehr ähnlich.
Sie funktioniert nur bei Textknoten.
.my-element {
text-shadow: 3px 3px 3px hotpink;
}
Die Werte für text-shadow
sind mit denen für box-shadow
identisch und in derselben Reihenfolge.
Der einzige Unterschied besteht darin, dass text-shadow
keinen spread
-Wert und kein inset
-Keyword hat.
Wenn Sie ein box-shadow
hinzufügen, wird es an die Form des Felds zugeschnitten. Bei text-shadow
ist das nicht der Fall.
Das bedeutet, dass der Schatten durch den Text hindurch sichtbar ist, wenn dieser vollständig oder teilweise transparent ist.
.my-element {
text-shadow: 3px 3px 3px gold;
color: rgb(0 0 0 / 70%);
}
Mehrere Schatten
Mit text-shadow
können Sie beliebig viele Schatten hinzufügen, genau wie mit box-shadow
.
Wenn Sie eine durch Kommas getrennte Sammlung von Wertesätzen hinzufügen, können Sie coole Texteffekte wie 3D-Text erstellen.
.my-element {
text-shadow: 1px 1px 0px white,
2px 2px 0px firebrick;
color: darkslategray;
}
Schlagschatten
Wenn Sie einen Schlagschatten haben möchten, der allen möglichen Kurven eines Bildes folgt, verwenden Sie den CSS-Filter drop-shadow
.
Dieser Schatten wird auf eine Alphamaske angewendet, was ihn sehr nützlich macht, um einem Ausschnittsbild einen Schatten hinzuzufügen, wie im Intro dieses Moduls.
.my-image {
filter: drop-shadow(0px 0px 10px rgba(0 0 0 / 30%))
}
Der Filter drop-shadow
hat dieselben Werte wie box-shadow
, aber das Keyword inset
und der Wert spread
sind nicht zulässig. Sie können beliebig viele Schatten hinzufügen, indem Sie der filter
-Property mehrere Instanzen von drop-shadow
-Werten hinzufügen.
Für jeden Schatten wird der letzte Schatten als Referenzpunkt für die Positionierung verwendet.
Wissen testen
Ihr Wissen über Schatten testen
Welcher der folgenden Schattenwerte ist nur für box-shadow
verfügbar?
inset
inset
ist ein Keyword, das ebenfalls nur für box-shadow
verwendet wird.Für ein Element sind jeweils nur 13 Box-Schatten zulässig.