Menu

CSS Blur und Filter: Weichzeichner, grayscale, brightness

filter: blur(5px) zeichnet ein Element weich, und backdrop-filter: blur() zeichnet weich, was dahinter liegt. Hier lernst du jede Filterfunktion (brightness, contrast, grayscale, sepia, saturate, hue-rotate, invert, drop-shadow) mit Live-Schiebereglern, wie du sie kombinierst und das Problem mit unscharfen Rändern.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

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

FunktionNeutraler WertWas sie machtBeispiel
blur(r)0Gaußsche Unschärfe mit Radius rblur(4px)
brightness(n)1dunkler unter 1, heller darüberbrightness(0.7)
contrast(n)1flacher unter 1, kräftiger darübercontrast(1.3)
grayscale(n)01 (oder 100%) ist vollständig graugrayscale(100%)
sepia(n)0warmer Brauntonsepia(0.6)
saturate(n)10 ist grau, über 1 kräftigersaturate(1.5)
hue-rotate(a)0degverschiebt jeden Farbton auf dem Farbkreishue-rotate(90deg)
invert(n)01 ist ein vollständiges Farbnegativinvert(1)
opacity(n)1wie die Eigenschaft opacityopacity(0.5)
drop-shadow(x y blur color)ein Schatten, der der Form folgtdrop-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-filter an 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 filter außer none erzeugt einen neuen Stacking Context und wird zum umgebenden Block für Nachfahren mit position: fixed, so wie transform.

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. Nimm backdrop-filter mit 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() statt box-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.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S