Animated Blob Backgrounds

Organic, animated blob shapes using SVG filters and CSS animations. Blobs morph smoothly between different shapes with grainy gradient fills. Multiple color schemes and animation speeds for a modern, sleek look.


Animated Blob Backgrounds


Create organic, animated blob backgrounds with smooth morphing shapes and grainy gradient fills. This snippet uses SVG filters (e.g. feTurbulence for grain) and CSS animations to morph blob shapes. Includes multiple color schemes and configurable animation speeds.

Overview

HTML Structure

Use a wrapper for the background and one or more blob elements. The grain overlay is an inline SVG filter referenced by the blobs or a full-bleed overlay.

<div class="blob-bg">
  <!-- Optional: SVG filter for grain (defined once, reused) -->
  <svg class="svg-filters" aria-hidden="true">
    <defs>
      <filter id="grain">
        <feTurbulence type="fractalNoise" baseFrequency="0.8" numOctaves="4" result="noise" />
        <feColorMatrix in="noise" type="saturate" values="0" result="mono" />
      </filter>
    </defs>
  </svg>

  <div class="blob blob--scheme-coral speed-slow"></div>
  <div class="blob blob--scheme-violet speed-medium"></div>
  <div class="blob blob--scheme-sunset speed-fast"></div>
</div>

CSS: Blob morphing and gradients

Blobs use large border-radius values (percentages) that animate to create morphing. Each corner gets a different value so the shape stays organic.

.blob-bg {
  position: relative;
  min-height: 100vh;
  overflow: hidden;
}

.blob {
  position: absolute;
  width: 60vmax;
  height: 60vmax;
  border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
  filter: url(#grain);
  opacity: 0.85;
  mix-blend-mode: multiply;
}

/* Morph animation */
@keyframes morph {
  0%   { border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
  25%  { border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%; }
  50%  { border-radius: 50% 60% 30% 60% / 30% 60% 70% 40%; }
  75%  { border-radius: 60% 40% 60% 30% / 70% 30% 50% 60%; }
  100% { border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
}

.blob {
  animation: morph 12s ease-in-out infinite;
}

.speed-slow  { animation-duration: 18s; }
.speed-medium { animation-duration: 12s; }
.speed-fast  { animation-duration: 8s; }

Color schemes

Define schemes with CSS variables and apply gradients to each blob.

.blob--scheme-coral {
  background: radial-gradient(circle at 30% 70%, #ff6b6b, #4ecdc4);
  top: -20%; left: -10%;
}

.blob--scheme-violet {
  background: radial-gradient(circle at 70% 30%, #667eea, #764ba2);
  top: 20%; right: -15%;
}

.blob--scheme-sunset {
  background: radial-gradient(circle at 50% 50%, #f093fb, #f5576c);
  bottom: -20%; left: 20%;
}

Grain with SVG filter

The #grain filter uses feTurbulence to add noise. You can composite it over the blob by applying filter: url(#grain) on the blob and tuning opacity, or use a separate full-screen div with the filter and blend mode so the blobs stay crisp and the grain sits on top.

Resources

Tips