CSS y web

Degradado de malla en CSS: cómo crearlo con capas radiales

No existe mesh-gradient() en CSS. Este es el método de capas que lo imita con convicción, el desenfoque y el grano que lo rematan y cuándo es mejor una imagen o un shader.

GradientlyCuenta verificada de Gradiently··6 min de lectura
Portada: August Basin · GR·Y97R·RQ

La versión corta

  • CSS no tiene una función nativa de degradado de malla, así que un degradado de malla en CSS se construye apilando varios degradados radiales sobre un color base plano.
  • Cada capa es una mancha de color en su propia posición que se desvanece a transparente, y los solapamientos crean la mezcla suave y multidireccional de una malla.
  • Un filtro de desenfoque en un pseudoelemento suaviza más las manchas, y una tenue capa de ruido oculta el banding.
  • Los degradados en capas estáticos son baratos de renderizar, pero los desenfoques grandes y las capas animadas se repintan a menudo y conviene mantenerlos lentos, pequeños u opcionales.
  • Cuando un diseño necesita muchos puntos de color, formas deformadas o movimiento fluido a pantalla completa, una imagen exportada, un vídeo o un shader WebGL suele ser la mejor herramienta.
En esta página

Un degradado de malla en CSS es un fondo donde el color se mezcla en varias direcciones a la vez, como si manchas de pigmento se hubieran empapado unas en otras. CSS no tiene una función de malla, y los degradados de malla que se esbozaron para SVG nunca llegaron a los navegadores, así que la versión web es una imitación: de tres a cinco capas de radial-gradient() apiladas sobre un color plano, cada una desvaneciéndose a transparent. Bien hecho, se acerca tanto que nadie nota la diferencia, pesa unos cientos de bytes y se ve nítido a cualquier tamaño.

Si quieres primero la teoría de diseño, qué es una malla y por qué se siente orgánica, lee los degradados de malla. Esta guía trata de construir uno en código.

Cómo funciona el método de capas

Cada capa es un punto de color. Su posición es el valor at, su alcance es la distancia del desvanecimiento y su intensidad es el alfa del color. Como el primer degradado de background-image se pinta encima, el orden importa menos de lo que parece: cada capa es casi transparente, así que se mezclan donde se solapan. El background-color base se ve donde no llega ninguna mancha.

Los cuatro puntos de color de una malla, cada uno solo sobre la base marino. Apilados, se mezclan en un único campo.
css
.mesh {
  background-color: #0b1026;
  background-image:
    radial-gradient(circle at 15% 20%, rgb(124 58 237 / 0.85), transparent 55%),
    radial-gradient(circle at 85% 25%, rgb(236 72 153 / 0.75), transparent 50%),
    radial-gradient(ellipse at 60% 90%, rgb(6 182 212 / 0.7), transparent 60%),
    radial-gradient(circle at 25% 80%, rgb(245 158 11 / 0.55), transparent 45%);
}
La pila completa. Cambia un valor at y toda la composición se reequilibra.

Paso a paso: crea tu propio degradado de malla en CSS

  1. 1

    Elige un fondo

    Elige el color plano que se ve entre las manchas. Los fondos oscuros hacen brillar las manchas; los claros las hacen parecer acuarela. El fondo también es tu alternativa si los degradados fallan.

  2. 2

    Elige de tres a cinco colores relacionados

    Los tonos vecinos se mezclan limpiamente. Los opuestos, como azul y naranja, se encuentran en una mancha gris. Los degradados turbios explican por qué y cómo evitarlo.

  3. 3

    Coloca las manchas descentradas

    Empuja los puntos hacia las esquinas y los bordes y deja que al menos uno quede en parte fuera de la caja, como at 110% 0%. Las manchas centradas parecen una diana.

  4. 4

    Varía el alcance y la intensidad

    Da a un color el mayor desvanecimiento y el alfa más alto para que lidere. Mantén el acento pequeño y más débil. Las manchas iguales parecen mecánicas.

  5. 5

    Mezcla en un espacio de color mejor

    Añade in oklab a cada capa, como en radial-gradient(in oklab circle at 15% 20%, ...), donde se admita. Los solapamientos quedan más brillantes que en sRGB.

  6. 6

    Remata con grano

    Los desvanecimientos grandes y suaves hacen banding en muchas pantallas. Una tenue superposición de ruido lo arregla y añade un aire de impreso; mira más abajo.

Mezclas más suaves con desenfoque

Los desvanecimientos radiales son suaves, pero sus formas son claramente redondas. Un desenfoque suaviza los círculos hacia algo más orgánico. Pon las capas en un pseudoelemento, desenfócalo y hazlo más grande con un inset negativo para que los bordes desenfocados no se desvanezcan en la página. isolation: isolate mantiene el z-index negativo dentro del componente.

css
.mesh {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: #0b1026;
}

.mesh::before {
  content: "";
  position: absolute;
  inset: -15%;
  z-index: -1;
  background-image:
    radial-gradient(circle at 20% 25%, #7c3aed, transparent 40%),
    radial-gradient(circle at 80% 30%, #ec4899, transparent 35%),
    radial-gradient(circle at 55% 85%, #06b6d4, transparent 40%);
  filter: blur(48px);
}
Una malla desenfocada en un pseudoelemento. El texto dentro de .mesh se mantiene nítido porque solo se desenfoca el pseudoelemento.

Añadir grano a un degradado de malla en CSS

El grano hace dos trabajos. Rompe los escalones visibles que aparecen en desvanecimientos anchos y de poco contraste, y da a la superficie la cualidad táctil, como de película, que hace que los degradados parezcan pensados y no predeterminados. En CSS, la fuente habitual es un filtro SVG feTurbulence usado como una imagen de fondo diminuta, superpuesta con poca opacidad. La técnica completa está en la textura de ruido en CSS, y el razonamiento de diseño en los degradados con grano.

Sin grano

  • Anillos visibles en las zonas oscuras de muchas pantallas
  • La superficie se lee como un color plano de pantalla
  • Parece un ajuste predeterminado de plantilla

Con un grano tenue

  • Los escalones se rompen y desaparecen
  • La superficie se lee como papel, película o impresión
  • Se siente deliberado y terminado

Animar un degradado de malla

Las posiciones de un degradado no se pueden animar por sí solas, pero las propiedades personalizadas registradas sí. Declara cada coordenada móvil con @property, úsala dentro del degradado y anima la propiedad. Mantén el movimiento lento y desactívalo para quienes piden movimiento reducido.

css
@property --x1 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 15%;
}

.mesh {
  background-color: #0b1026;
  background-image:
    radial-gradient(circle at var(--x1) 20%, rgb(124 58 237 / 0.85), transparent 55%),
    radial-gradient(ellipse at 60% 90%, rgb(6 182 212 / 0.7), transparent 60%);
  animation: drift 20s ease-in-out infinite alternate;
}

@keyframes drift {
  to { --x1: 55%; }
}

@media (prefers-reduced-motion: reduce) {
  .mesh { animation: none; }
}
Una mancha que se desplaza por la parte superior. Añade una segunda propiedad por cada coordenada que quieras mover.

Cada fotograma de esta animación repinta todo el fondo. En una tarjeta pequeña es trivial; en un hero a pantalla completa vale la pena medirlo. La guía del degradado animado cubre alternativas más baratas, como mover una capa sobredimensionada con transform.

Cuándo usar una imagen o WebGL en su lugar

EnfoqueMejor paraOjo con
Degradados CSS en capasFondos estáticos, tarjetas, heroes con de tres a cinco coloresManchas de aspecto redondo, banding sin grano
CSS con desenfoqueCampos estáticos más suaves y orgánicosCoste de repintado si se anima o cambia de tamaño a menudo
Imagen exportada (AVIF o WebP)Mallas complejas con muchos puntos o formas pictóricasPeso del archivo y un recorte fijo por formato
Bucle de vídeoMovimiento rico en un heroTamaño del archivo, reglas de reproducción automática, movimiento reducido
Shader WebGLMovimiento fluido e interactivo a pantalla completaComplejidad del código, uso de batería, alternativas
Elige la herramienta más ligera que siga viéndose bien.

Los shaders se tratan en los degradados WebGL. Un camino intermedio es diseñar el fondo una vez como un material vivo y exportarlo: los Marks de Gradiently son materiales de tipo malla con color, grano, luz y movimiento, y un diseño hecho con uno se exporta como PNG, JPEG o un bucle de vídeo continuo de 5 a 30 segundos.

August Basin

GR·Y97R·RQ

August Basin

Ver este Mark
Un Mark: manchas de color, material y grano renderizados en vivo en lugar de aproximados con capas.

Preguntas frecuentes

¿Se puede hacer un degradado de malla solo con CSS?

No de forma nativa, pero apilar de tres a cinco degradados radiales que se desvanecen a transparente sobre un color base da una malla convincente. Un desenfoque y una capa de ruido lo rematan.

¿Cuántos degradados radiales necesita una malla CSS?

De tres a cinco suele bastar. Menos parece un simple resplandor; más tiende a volverse turbio y más difícil de equilibrar.

¿Por qué mi degradado de malla CSS se ve turbio?

Los tonos opuestos que se encuentran en sRGB se mezclan pasando por el gris. Usa colores vecinos, reduce el solapamiento o añade in oklab a cada capa.

¿Es malo para el rendimiento un degradado de malla CSS?

Uno estático es barato. Los costes suben con los filtros de desenfoque grandes y con la animación, porque el fondo se repinta en cada fotograma.

¿Admite SVG los degradados de malla?

Los degradados de malla se esbozaron para SVG 2 pero los navegadores nunca los implementaron, así que en la web se imitan con capas, se usa una imagen o se renderizan con WebGL.

Compartir esta guía

Escrito por GradientlyCuenta verificada de Gradiently

El equipo detrás de Gradiently, una herramienta de diseño creada en torno a los Marks: degradados vivos que hacen que todo lo que diseñas parezca tuyo.

Ver nuestro perfil