What a mesh gradient actually is
There’s no dedicated CSS “mesh-gradient” function — this effect is built by stacking multiple radial-gradient layers in a single background-image, each a soft colored blob positioned at a different point. Where they overlap, their semi-transparent edges blend, producing the fluid, multi-color wash you see in modern hero sections. This generator lets you drag color nodes around a plane and compiles their positions into that stack of radials. Because it’s pure native CSS, it works everywhere with zero JavaScript at runtime and no WebGL payload.
The fade-to-transparent detail that makes blends clean
Smooth mesh blends depend on fading each radial out to a transparent version of its own color, not the keyword transparent. As covered for the CSS Gradient Generator, transparent means transparent black, so fading to it muddies the blend with gray. Fading rgba(255,0,0,1) → rgba(255,0,0,0) keeps the hue pure all the way to the edge, which is why the generator outputs same-color transparent stops — and why older Safari, which historically mishandled this, gets the explicit same-hex fade.
Performance is the real consideration
A mesh gradient is the most GPU-intensive background type in everyday CSS. The cost scales with the number of nodes and the painted area, so the practical guidance is in the FAQs above: apply once to a fixed element, rasterize static meshes to an image, and never animate the stops. On a small decorative panel it’s nothing; on a full-screen animated background it can noticeably drain a phone battery.
Curing color banding
Large gradients across similar tones can show stepped banding on 8-bit displays. The reliable fix is a faint (~1–4%) noise or film-grain overlay on top of the mesh, which dithers the transition and hides the steps. Adding more color nodes also smooths the ramp. Define your palette and node positions here, copy the production-ready background-image, and add a noise overlay if you see banding on large surfaces.