← Labs · DE EN ES
feTurbulence + feDisplacementMap + backdrop-filter

Echtes Glas biegt,
Blur mittelt nur.

Blur nimmt die Pixel hinter deinem Panel und bildet den Durchschnitt. Ergebnis: graues Rechteck mit Milchfolie.

Glas verschiebt jeden Backdrop-Pixel seitwärts: Licht, das gebrochen wird. Genau das macht dieser SVG-Filter hier, live, hinter dieser Karte.

↓ scrollen für den Vergleich · die runde Linse kannst du frei über die Seite ziehen, die Wellen weichen ihr aus

Der Duell-Test

Gleicher Hintergrund. Zwei Physiken.

Beide Panels liegen über denselben ruhig laufenden Wellen. Links der Standard-Look, rechts der volle Stack. Achte auf die leuchtenden Wellenkämme, wenn sie unter den Panels durchziehen.

nur blur: „div"

backdrop-filter: blur(14px)

Durchschnitt der Pixel. Detail weg, Kontrast weg, Material weg. Die Wellenkämme dahinter werden zu Nebel: flat gray rectangle.

echtes glas: „object"

url(#bend) + blur(2px) + 1px Kante

Die Wellenkämme knicken und brechen, als läge dickes Glas darüber. Dazu die weiße Innenkante oben: die beleuchtete Stirnseite der Scheibe.

Playground

Dreh am Glas

Die Regler schreiben live in den SVG-Filter. Jede Glasfläche auf der Seite (Karten und Linse) hängt am selben #bend.

animiert den Seed des Rauschens: Das Glas beginnt zu fließen
Das Rezept

Drei Zutaten, kein Framework

  1. feTurbulence erzeugt eine Rausch-Textur: die Mikro-Oberfläche der Glasscheibe.
  2. feDisplacementMap liest das Rauschen und verschiebt jeden Backdrop-Pixel seitwärts: R-Kanal steuert X, G-Kanal steuert Y. Das ist die Lichtbrechung.
  3. Der Filter kommt per url(#bend) in den backdrop-filter, direkt neben einen kleinen Blur. Dann eine 1px weiße Innenkante als beleuchtete Stirnseite, und aus dem div wird ein Objekt.
<!-- 1 + 2: die Scheibe -->
<svg width="0" height="0">
  <filter id="bend">
    <feTurbulence type="fractalNoise" baseFrequency="0.012 0.016"
                  numOctaves="2" result="noise"/>
    <feGaussianBlur in="noise" stdDeviation="2" result="soft"/>
    <feDisplacementMap in="SourceGraphic" in2="soft" scale="90"
                       xChannelSelector="R" yChannelSelector="G"/>
  </filter>
</svg>

/* 3: das Objekt */
.glass {
  backdrop-filter: url(#bend) blur(2px) saturate(1.6);
  border: 1px solid rgba(255,255,255,.35);
  box-shadow:
    inset 0  1px 0 rgba(255,255,255,.65), /* lit edge */
    inset 0 -1px 0 rgba(255,255,255,.12),
    0 24px 60px rgba(0,0,0,.45);
}

Heads-up: backdrop-filter: url(…) mit SVG-Filtern rendert aktuell nur in Chromium-Browsern. Safari & Firefox zeigen den Blur-Fallback, noch ein Grund, warum überall flache graue Rechtecke rumstehen.

Dein Browser rendert SVG-Filter nicht im backdrop-filter. Du siehst gerade den Blur-Fallback. Chromium zeigt die volle Brechung.