по-русски

SVG and <image> tag tricks

Alexey Ten, August 16, 2013

A few days ago Lea Verou shared a link to Jake Archibald's post Having fun with <image> where he once again found out that image and img are nearly the same, all browsers replace image with img while parsing HTML.

svg.svg
svg.png

A couple of months ago this property of image tag gave me the idea to use it for graceful degradation of SVG images in browsers which do not support SVG. The idea is extremely simple, we will have a SVG image for modern browsers and regular raster image for others. And write the following code:

<svg width="96" height="96">
    <image xlink:href="svg.svg" src="svg.png" width="96" height="96"/>
</svg>

And here the magic: browsers which support SVG will read the code as:

<svg width="96" height="96">
    <image xlink:href="svg.svg" width="96" height="96"/>
</svg>

ignoring src attribute and will show SVG image.

Browsers which do not support SVG will ignore unknown tag svg and thanks to image is replaced with img will read the code as:

<img src="svg.png" width="96" height="96"/>

and will show regular image.

For very simple images (e.g. icons), it is possible not to create a separate SVG file, just write all the content in HTML, that could be shorter than the file path.

<svg height="16" width="16">
    <path d="M5 1v14l9-7">
    <image src="next.png">
</svg>
Example: