SVG filters can be applied to any HTML element using CSS. This powerful combination allows you to create complex visual effects that can be dynamically controlled through CSS.
/* Basic filter usage */
.element {
filter: url(#filterId);
}
/* Multiple filters */
.element {
filter: url(#filter1) url(#filter2);
}
/* Combining with CSS filters */
.element {
filter: url(#svgFilter) blur(5px);
}
Hover over the box below to see the blur filter in action:
The box above uses this CSS:
.demo-box:hover {
filter: url(#blurFilter);
transition: filter 0.3s ease;
}
SVG filters are well-supported in modern browsers. However, it's good practice to provide fallbacks:
.element {
/* Fallback for browsers that don't support SVG filters */
filter: blur(5px);
/* SVG filter */
filter: url(#customBlur);
}
<svg viewBox="0 0 200 200">
<rect width="100" height="100" fill="red" />
</svg>
This filter applies a Gaussian blur to the rectangle.
/* SVG Definition */
<filter id="blurFilter">
<feGaussianBlur in="SourceGraphic"
stdDeviation="5" />
</filter>
/* CSS Usage */
.element {
filter: url(#blurFilter);
}
This filter converts the rectangle to grayscale using a color matrix.
/* SVG Definition */
<filter id="colorMatrixFilter">
<feColorMatrix type="matrix"
values="0.33 0.33 0.33 0 0
0.33 0.33 0.33 0 0
0.33 0.33 0.33 0 0
0 0 0 1 0" />
</filter>
/* CSS Usage */
.element {
filter: url(#colorMatrixFilter);
}
This filter adds a drop shadow to the rectangle.
/* SVG Definition */
<filter id="dropShadowFilter">
<feDropShadow dx="5" dy="5"
stdDeviation="3" />
</filter>
/* CSS Usage */
.element {
filter: url(#dropShadowFilter);
}
This example combines a blur, grayscale conversion, and drop shadow.
/* SVG Definition */
<filter id="combinedFilter">
<feGaussianBlur in="SourceGraphic"
stdDeviation="3" />
<feColorMatrix type="matrix"
values="0.33 0.33 0.33 0 0
0.33 0.33 0.33 0 0
0.33 0.33 0.33 0 0
0 0 0 1 0" />
<feDropShadow dx="5" dy="5"
stdDeviation="2" />
</filter>
/* CSS Usage */
.element {
filter: url(#combinedFilter);
}