Glass Background Studio

Build the backdrop behind your glass as well as the glass itself. Mix a base gradient with two to six blurred colour blobs, stack up to three glass layers with blur, saturation, brightness and contrast, add a gradient border highlight and grain, then check text contrast over the lightest and darkest colours behind the glass. Exports include fallbacks for browsers without backdrop-filter and for users who prefer reduced transparency or motion.

Preset gallery

Glass card

Frosted panels blur whatever sits behind them.

Accessibility checks

  • Pass Text keeps at least 5:1 contrast even over the lightest and darkest colours behind the glass.
  • Pass Without backdrop-filter (or with reduced transparency) the near-opaque fallback keeps 14.1:1 contrast.
  • Pass Total blur of 18px across layers is light enough for smooth scrolling.
  • Pass Blobs are static, so the glass only re-blurs when the page scrolls.
  • Pass backdrop-filter creates a stacking context and a containing block for fixed children: don't put dropdowns or fixed overlays inside a blurred element — blur a ::before layer instead.

Export code

.glass-scene {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background: linear-gradient(160deg, #1E1B4B, #0F172A);
  color: #FFFFFF;
}
.glass-scene__blob {
  position: absolute;
  z-index: -1;
  border-radius: 50%;
  aspect-ratio: 1;
  translate: -50% -50%;
  pointer-events: none;
}
.glass-scene__blob:nth-child(1) {
  left: 22%;
  top: 30%;
  width: 42%;
  background: #EC4899;
  filter: blur(60px);
}
.glass-scene__blob:nth-child(2) {
  left: 78%;
  top: 28%;
  width: 46%;
  background: #6366F1;
  filter: blur(70px);
}
.glass-scene__blob:nth-child(3) {
  left: 58%;
  top: 82%;
  width: 40%;
  background: #22D3EE;
  filter: blur(60px);
}
.glass-scene__layer {
  position: relative;
  border-radius: var(--glass-radius, 24px);
}
.glass-scene__layer--1 {
  --glass-radius: 24px;
  background: rgba(15, 23, 42, 0.48);
  -webkit-backdrop-filter: blur(18px) saturate(160%);
  backdrop-filter: blur(18px) saturate(160%);
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
.glass-scene__layer--1::before {
  content: '';
  position: absolute;
  inset: 0;
  padding: 1px;
  border-radius: inherit;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.45), rgba(255, 255, 255, 0) 45%, rgba(255, 255, 255, 0.18));
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  pointer-events: none;
}
.glass-scene__layer::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E");
  pointer-events: none;
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .glass-scene__layer--1 { background: rgba(15, 23, 42, 0.88); }
}
@media (prefers-reduced-transparency: reduce) {
  .glass-scene__layer--1 { background: rgba(15, 23, 42, 0.88); }
  .glass-scene__layer { -webkit-backdrop-filter: none; backdrop-filter: none; }
}
Favourites on this device (0)

No favourites yet.

Backdrop
Base
Base colour 1
Base colour 2
Blobs
Edit blob
Colour
Glass layers
Edit layer
Tint
Text, grain & fallback

How to use the glass background studio

  1. Start from a preset such as iOS frosted, dark aurora, finance dashboard card or login card.
  2. In Backdrop, choose a solid, linear or radial base and its colours, a blend mode for the blobs, and whether the blobs drift slowly.
  3. In Blobs, pick a blob by number, then move it, resize it, change its colour and blur. Add up to six or remove down to two.
  4. In Glass layers, edit up to three stacked layers: tint and opacity, backdrop blur, saturation, brightness, contrast, corner radius, gradient border highlight, inner highlight and outer shadow.
  5. Set the text colour and grain, and switch on Preview without backdrop-filter to check the fallback.
  6. Read the checks, then export CSS, HTML, a React component or Tailwind markup, or copy a share link.

How the effect is built

The scene is an isolated container with a gradient background. Each blob is an absolutely positioned circle with a CSS blur filter, layered behind the content. Each glass layer gets a translucent tint and a backdrop-filter chain such as blur(18px) saturate(160%), always emitted with the -webkit- prefix as well. The gradient border is a masked pseudo-element, so it follows the corner radius, and the grain is an inline SVG turbulence pattern, so nothing is downloaded.

Three safety nets are always included: an @supports not (backdrop-filter …) block with a near-opaque surface, the same surface under prefers-reduced-transparency: reduce, and, when blobs are animated, prefers-reduced-motion: reduce stops them.

Worked examples

Finance dashboard card. A deep green-to-navy gradient, a green and a blue blob, one dark glass layer at 40% opacity with an 18 px blur. White text stays above 4.5:1 even over the brightest blob, so the contrast check passes.

Modal overlay. Two layers: a nearly clear, lightly blurred full-screen layer that dims the page, and a more opaque card on top. Stacking layers is how you get depth without making text hard to read.

Neon hero. A near-black base with pink and cyan blobs in screen blend mode, slowly drifting. The motion check warns that animation under glass is expensive, and the export turns it off for reduced motion.

How to read the checks

  • Contrast tests your text colour against every colour that can sit behind the glass — the base stops and each blob — seen through all the layers’ tints. Blur can mix colours but never makes them lighter than the lightest or darker than the darkest, so this is a true worst case.
  • Fallback runs the same test on the no-blur surface.
  • Blur adds up the blur of all layers; large totals are slow to paint over big areas.
  • Motion flags animated blobs under glass.
  • Stacking reminds you how backdrop-filter changes layering.

Tips and common mistakes

  • Keep text on the top layer and raise its opacity until the contrast check passes.
  • Use fewer, softer blobs for content-heavy pages; save vivid scenes for heroes.
  • Never put menus inside a blurred header. Blur a pseudo-element or a sibling layer instead.
  • Test the fallback. Some users turn transparency off; the design should still work.
  • Limit glass to a few elements. Every blurred element is repainted when what’s behind it changes.

Limitations

The preview uses your colours, not a photo. If you place glass over images or video, check contrast against the actual content. Tailwind output covers the core effect; the gradient border, grain and reduced-transparency variant need the CSS export.

Frequently asked questions

How is this different from the glassmorphism generator?

The glassmorphism generator styles a single glass card over a fixed preview background. This studio designs the whole scene: the coloured blobs behind the glass, several stacked glass layers, grain, and production fallbacks. Use it for hero sections, dashboards, modals and navbars.

Why do I need blobs or a gradient behind glass?

backdrop-filter blurs whatever is behind an element. Over a plain background there is nothing to blur, so the glass looks flat. Soft, blurred colour blobs give the frosted effect something to work with.

What happens in browsers without backdrop-filter?

The export includes an @supports not (backdrop-filter) block that swaps the translucent tint for a nearly opaque surface, so text stays readable. Use “Preview without backdrop-filter” to see exactly what those browsers show.

What does prefers-reduced-transparency do?

It is a media feature for people who ask their operating system for less transparency. The export gives them the same solid fallback surface and removes the blur.

Why does the studio warn about stacking contexts?

backdrop-filter creates a new stacking context and becomes the containing block for fixed-position children. A dropdown or fixed overlay placed inside a blurred header can end up clipped or positioned against the header instead of the viewport. Put the blur on a ::before layer, or keep menus outside the blurred element.

Are animated blobs a problem?

Moving content under glass forces the browser to re-blur every frame, which costs battery and can stutter on phones. The export stops the animation for people who prefer reduced motion; consider static blobs on small screens.

Sources