SVG Blur Effects
Explore feGaussianBlur in depth — the filter primitive that creates soft, out-of-focus blur effects, shadows, and glows in SVG.
The feGaussianBlur Primitive
feGaussianBlur is the most commonly used filter primitive, and it blurs its input using a Gaussian smoothing function controlled by the stdDeviation attribute. A larger stdDeviation spreads each pixel's color further into its neighbors, producing a stronger blur; a value near zero leaves the image essentially unchanged. It is typically placed inside a <filter> and applied to a shape with the filter="url(#id)" attribute.
A Basic Blur
<!DOCTYPE html>
<html>
<body>
<svg width="240" height="100" viewBox="0 0 240 100" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="blurLight"><feGaussianBlur stdDeviation="2" /></filter>
<filter id="blurHeavy"><feGaussianBlur stdDeviation="8" /></filter>
</defs>
<circle cx="60" cy="50" r="35" fill="crimson" filter="url(#blurLight)" />
<circle cx="170" cy="50" r="35" fill="crimson" filter="url(#blurHeavy)" />
</svg>
</body>
</html>Controlling Blur Strength with stdDeviation
stdDeviation accepts either a single number, which blurs evenly in both the horizontal and vertical directions, or two space-separated numbers meaning stdDeviation="x y", which blurs each axis independently. Giving the two axes very different values produces a directional, motion-blur-like streak instead of a uniform soft-focus effect.
Directional Motion Blur
<!DOCTYPE html>
<html>
<body>
<svg width="220" height="100" viewBox="0 0 220 100" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="motionBlur" x="-50%" width="200%">
<feGaussianBlur stdDeviation="12 1" />
</filter>
</defs>
<rect x="60" y="35" width="100" height="30" fill="#333" filter="url(#motionBlur)" />
</svg>
</body>
</html>Soft Shadows and Glows with Blur
feGaussianBlur rarely works alone in production filters — it is usually the first step in a chain. Pair it with feOffset and feMerge to build a soft drop shadow, or with feFlood and feComposite to build a colored glow that sits behind the original shape. The edgeMode attribute controls how the blur treats pixels at the very edge of the filter region: duplicate repeats the edge pixels outward (avoiding dark fringes), wrap tiles the image, and none (the default) treats anything outside the region as transparent.
- stdDeviation="3" — a light blur, subtle softening of edges
- stdDeviation="10" — a heavy blur, a dreamy soft-focus look
- stdDeviation="12 1" — a directional blur stretched along one axis
- edgeMode="duplicate" — extends edge pixels to avoid dark blur fringes at the boundary
- feGaussianBlur + feOffset + feMerge — the standard recipe for a soft drop shadow
- feGaussianBlur + feFlood + feComposite — the standard recipe for a colored glow halo
A Colored Glow Effect
<!DOCTYPE html>
<html>
<body>
<svg width="200" height="140" viewBox="0 0 200 140" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="glow" x="-60%" y="-60%" width="220%" height="220%">
<feGaussianBlur in="SourceAlpha" stdDeviation="6" result="blurredAlpha" />
<feFlood flood-color="dodgerblue" result="glowColor" />
<feComposite in="glowColor" in2="blurredAlpha" operator="in" result="coloredGlow" />
<feMerge>
<feMergeNode in="coloredGlow" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
</defs>
<circle cx="100" cy="70" r="35" fill="white" stroke="#222" stroke-width="2" filter="url(#glow)" />
</svg>
</body>
</html>Exercise: SVG Blur Effects
Which filter primitive is used to create a blur effect in SVG?