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

El cristal real curva,
el desenfoque solo promedia.

El desenfoque toma los píxeles detrás de tu panel y los promedia. Resultado: un rectángulo gris con película esmerilada.

El cristal desplaza cada píxel del fondo lateralmente: luz que se refracta. Eso es exactamente lo que hace este filtro SVG, en vivo, detrás de esta tarjeta.

↓ desplázate para la comparación · arrastra la lente redonda por toda la página · las olas ceden bajo ella

La prueba del duelo

Mismo fondo. Dos físicas.

Ambos paneles están sobre las mismas olas que avanzan despacio. A la izquierda el aspecto estándar, a la derecha el stack completo. Fíjate en las crestas luminosas de las olas al pasar bajo los paneles.

solo desenfoque: «div»

backdrop-filter: blur(14px)

Promedio de los píxeles. Detalle perdido, contraste perdido, material perdido. Las crestas detrás se vuelven niebla: flat gray rectangle.

cristal real: «object»

url(#bend) + blur(2px) + borde de 1px

Las crestas se quiebran y refractan como si un cristal grueso las cubriera. Además el borde interior blanco arriba: la cara iluminada del panel.

Zona de pruebas

Gira el cristal

Los controles escriben en vivo en el filtro SVG. Cada superficie de cristal de la página (tarjetas y lente) depende del mismo #bend.

anima la semilla del ruido: el cristal empieza a fluir
La receta

Tres ingredientes, sin framework

  1. feTurbulence crea una textura de ruido, la microsuperficie del cristal.
  2. feDisplacementMap lee el ruido y desplaza cada píxel del fondo lateralmente: el canal R controla X, el canal G controla Y. Esa es la refracción.
  3. El filtro entra en backdrop-filter mediante url(#bend), justo al lado de un pequeño blur. Luego un borde interior blanco de 1px como cara iluminada, y el div se convierte en un objeto.
<!-- 1 + 2: el panel -->
<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: el objeto */
.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);
}

Aviso: backdrop-filter: url(…) con filtros SVG actualmente solo se renderiza en navegadores Chromium. Safari y Firefox muestran el fallback de desenfoque, una razón más por la que hay rectángulos grises planos por todas partes.

Tu navegador no renderiza filtros SVG en backdrop-filter. Estás viendo el fallback de desenfoque. Chromium muestra la refracción completa.