I have been trying to find an easy, efficient way of applying a Gaussian blur effect to images and elements. I would usually achieve this by creating the image with the Gaussian Blur effect already applied. I wouldn't say this is efficient at all. It is about as efficient as creating rounded corners using images.
One of the ways to apply a Gaussian blur to elements and images is by making use of the svg filters. It can be applied to any element or image just by adding a bit of code to the HTML and specifying which element you would like to target within the CSS.
The HTML
xmlns:svg="http://www.w3.org/2000/svg"
must be added to the <html>
tag. A working example would look like this:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg"></html>
This allows Firefox to make use of the SVG filters. We also have to add one last bit of HTML to get this thing working.
<body>
<p>Pellentesque habitant morbi tristique senectus</p>
<img src="images/gaussian-blur.png" alt="" />
<svg:svg>
<!-- Filter ID/Name -->
<svg:filter id="example-one">
<!-- Amount of Gaussian Blur that should be applied -->
<svg:feGaussianBlur stdDeviation="0.9" />
</svg:filter>
<svg:filter id="example-two">
<svg:feGaussianBlur stdDeviation="2" />
</svg:filter>
</svg:svg>
</body>
The CSS
The CSS is quite simple and easy to implement. (This must be an INTERNAL stylesheet. - It does not work if it is external, for some reason)
<style type="text/css">
p {
filter: url(#example-one);
}
img:hover,
p:hover {
filter: url(#example-two);
}
</style>
The ID that the url refers to is the ID we set within the svg html section.
!important
Any problems? - In short, yes. In long, yes. There are quite a few problems and little annoyances I have come across. Here is a list (There are probably more that I haven't come across):
- The filter only works in Firefox
- The filter only works if the file extension is .xhtml
- IE doesn't seem to open .xhtml file extensions, it automatically attempts to download it.
- An internal style sheet HAS to be used in order for the svg filter to take effect.
- jQuery doesn't seem to work properly with .xhtml file extensions. Certain methods that I tried, worked - css(), animate() - and other methods didn't - html(), prepend(), append().
- The HTML doesn't validate. Adding the html via jQuery in order to achieve validation doesn't work since the methods I used to achieve this didn't work within the .xhtml file
Conclusion
I think the effect is very cool and I have fun playing around with it, but I would never use this on an actual web page since there are just too many quirks. For the moment, I think I will stick to images. If you are interested in applying clip-paths, filters and/or masks within webpages, or if you would just like more information regarding the Gaussian Blur, have a look weblogs.mozillazine.