Ein Element weichzeichnen
filter: blur() nimmt eine Länge, den Radius der Unschärfe. Je größer er ist, desto unschärfer wird das Element:
filter funktioniert an jedem Element, nicht nur an Bildern: Ein weichgezeichnetes div zeichnet auch seinen Text, Rahmen und seine Kinder weich. Achte auf die weichen Ränder der weichgezeichneten Bilder: Die Unschärfe verteilt das Bild nach außen und mischt den transparenten Bereich drumherum hinein. Die Lösung steht unten unter „Das Problem mit unscharfen Rändern“.
Den Hintergrund weichzeichnen: backdrop-filter
Um weichzuzeichnen, was hinter einem Element liegt (ein Milchglas-Panel über einem Foto oder einer Seite), nimm backdrop-filter. Der eigene Inhalt des Elements bleibt scharf. Es braucht einen durchsichtigen Hintergrund, damit die Unschärfe sichtbar wird:
Die Streifen und Kreise sind um das Panel herum scharf und dahinter unscharf, während der Text des Panels unberührt bleibt. Halte den Text lesbar: Ein hellerer oder dunklerer Farbton in der Hintergrundfarbe hilft bei unruhigen Bildern.
Jede Filterfunktion live
Bewege einen beliebigen Schieberegler. Die Zeile unter dem Bild ist der exakte filter-Wert, bereit zum Kopieren:
Nur Funktionen, die du von ihrem neutralen Wert wegbewegt hast, werden ausgeschrieben, damit der Wert kurz bleibt. brightness(1) oder blur(0px) ändern nichts, also gibt es keinen Grund, sie aufzulisten.
Filterfunktionen
| Funktion | Neutraler Wert | Was sie macht | Beispiel |
|---|---|---|---|
blur(r) | 0 | Gaußsche Unschärfe mit Radius r | blur(4px) |
brightness(n) | 1 | dunkler unter 1, heller darüber | brightness(0.7) |
contrast(n) | 1 | flacher unter 1, kräftiger darüber | contrast(1.3) |
grayscale(n) | 0 | 1 (oder 100%) ist vollständig grau | grayscale(100%) |
sepia(n) | 0 | warmer Braunton | sepia(0.6) |
saturate(n) | 1 | 0 ist grau, über 1 kräftiger | saturate(1.5) |
hue-rotate(a) | 0deg | verschiebt jeden Farbton auf dem Farbkreis | hue-rotate(90deg) |
invert(n) | 0 | 1 ist ein vollständiges Farbnegativ | invert(1) |
opacity(n) | 1 | wie die Eigenschaft opacity | opacity(0.5) |
drop-shadow(x y blur color) | ein Schatten, der der Form folgt | drop-shadow(2px 4px 6px rgb(0 0 0 / 0.3)) |
Zahlen können auch Prozentwerte sein (grayscale(100%) ist gleich grayscale(1)). Mehrere Funktionen stehen in einem Wert, getrennt durch Leerzeichen, und werden der Reihe nach angewendet: filter: grayscale(1) sepia(1) ergibt einen Braunton, während sepia(1) grayscale(1) einfach grau endet.
drop-shadow folgt der Form
box-shadow ist immer ein Rechteck (höchstens mit abgerundeten Ecken). drop-shadow() wird aus den sichtbaren Pixeln gezeichnet, also bekommt ein transparentes Icon einen Schatten mit dem Umriss des Icons:
Der erste Stern wirft einen quadratischen Schatten aus seiner unsichtbaren Begrenzungsbox. Der zweite wirft einen sternförmigen. Anders als box-shadow hat drop-shadow() keinen spread-Wert und kein inset; die Seite zu box-shadow behandelt diese.
Das Problem mit unscharfen Rändern
Ein weichgezeichnetes Bild blendet an seinen Rändern aus, weil die Unschärfe die transparenten Pixel drumherum hineinzieht. Um eine harte Kante zu behalten (zum Beispiel für einen weichgezeichneten Hero-Hintergrund), setz das Bild in einen Container mit overflow: hidden und vergrößere das Bild leicht, damit der weiche Rand abgeschnitten wird:
.hero { overflow: hidden; }
.hero img { filter: blur(8px); transform: scale(1.1); }
Hover-Effekte mit filter
filter lässt sich per Transition animieren, also sind eine Logowand, die von Grau zu Farbe wechselt, oder eine Karte, die bis zum Hovern abgedunkelt ist, zwei Regeln:
Fahr über eine Kachel (oder spring per Tab hin), und ihre Farbe blendet sich ein.
Gut zu wissen
- Performance. Große Unschärferadien auf großen Flächen kosten am meisten, besonders
backdrop-filteran Elementen, die sich bewegen oder scrollen. Teste auf einem Handy. - Lesbarkeit. Zeichne nie Text weich, den Menschen lesen müssen, und prüf den Kontrast von Text auf einem Milchglas-Panel.
- Stapeln. Jeder
filteraußernoneerzeugt einen neuen Stacking Context und wird zum umgebenden Block für Nachfahren mitposition: fixed, so wietransform.
Häufige Fehler
filter: blur(5). Der Radius braucht eine Einheit:blur(5px).filter: blur()für ein Milchglas-Panel nutzen. Es zeichnet den eigenen Text des Panels weich. Nimmbackdrop-filtermit transparentem Hintergrund.- Ein backdrop-filter, das nichts zeigt. Der Hintergrund des Elements muss zumindest teilweise transparent sein, und dahinter muss etwas liegen.
- Zwei
filter-Deklarationen. Die zweite ersetzt die erste. Setz alle Funktionen in einen Wert. - Kastenförmige Schatten an transparenten Icons. Nimm
filter: drop-shadow()stattbox-shadow.
Häufig gestellte Fragen
Wie zeichne ich ein Element in CSS weich?
Nimm filter: blur(5px);. Die Länge ist der Radius der Unschärfe: 0 ist scharf, größere Werte sind unschärfer. Es zeichnet das Element und alles darin weich, auch Text und Bilder.
Wie zeichne ich den Hintergrund hinter einem Element weich?
Nimm backdrop-filter: blur(10px); am Element, mit einem teilweise transparenten Hintergrund wie rgb(255 255 255 / 0.5). Der eigene Inhalt des Elements bleibt scharf, und alles dahinter wird weichgezeichnet: der Milchglas-Effekt.
Was ist der Unterschied zwischen drop-shadow() und box-shadow?
box-shadow folgt immer der rechteckigen Box des Elements. filter: drop-shadow() folgt der sichtbaren Form, einschließlich transparenter Bereiche eines PNG oder SVG, also hat der Schatten eines Icons den Umriss des Icons.
Wie mache ich ein Bild in CSS schwarzweiß?
Nimm filter: grayscale(100%); (oder grayscale(1)). Mit einer Transition und filter: grayscale(0) beim Hovern kommt die Farbe zurück.
Kann ich mehrere Filter gleichzeitig verwenden?
Ja, liste sie getrennt durch Leerzeichen auf: filter: grayscale(1) brightness(1.2) blur(1px);. Sie werden der Reihe nach angewendet, also kann die Reihenfolge das Ergebnis ändern. Eine zweite filter-Deklaration ersetzt die erste.