Reputation: 7736
Is there a way to fix the HTML validation error? While keeping using the SVG as the source code of the <img>
tag?
Error: Bad value data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' height='10px' width='20px'></svg> for attribute src on element`
My source code:
<img alt="homepage" src="data:image/svg+xml;utf8,<svg
xmlns='http://www.w3.org/2000/svg' height='10px' width='20px'></svg>"
/>
Upvotes: 0
Views: 439
Reputation: 22760
For inline SVG; <svg>
tags can be inserted as <svg>
elements directly into the HTML and not part of the <img>
tag. As it is inline SVG the <img>
tag is pretty redundant as all the required parameters can be held inside the <SVG>
.
Example:
<html>
<head>
<title>SVG Demo</title>
</head>
<body>
<svg
viewBox="0 0 100 100" preserveAspectRatio="xMidYMid slice"
style="width:35%; height:35%; position:absolute; top:0; left:0; z-index:-1;">
<linearGradient id="gradient">
<stop class="begin" offset="0%"/>
<stop class="end" offset="100%"/>
</linearGradient>
<rect x="0" y="0" width="100" height="100" style="fill:#cc9966;" />
<circle cx="50" cy="50" r="30" style="fill:#f9f333;" />
</svg>
</body>
</html>
Upvotes: -1
Reputation: 8040
To use an SVG as a data URI within an <img>
element, the SVG code needs to be escaped:
<img alt="homepage" src="data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='10px' width='20px'%3E%3C/svg%3E">
There are several free tools for doing this, such as URL-encoder for SVG.
Upvotes: 3
Reputation: 176
If you want a non-interactive svg, use with script fallbacks to png version (for older IE and android < 3). One clean and simple way to do that:
<img src="your.svg" onerror="this.src='your.png'">
your.svg being the path to your svg.
This will behave much like a GIF image, and if your browser supports declarative animations (SMIL) then those will play.
If you want an interactive svg, use either <iframe>
or <object>
.
If you need to provide older browsers the ability to use an svg plugin, then use <embed>
.
For svg in css background-image and similar properties, modernizr is one choice for switching to fallback images, another is depending on multiple backgrounds to do it automatically:
div {
background-image: url(fallback.png);
background-image: url(your.svg), none;
}
An additional good read is this blogpost on svg fallbacks.
Upvotes: 0