Using a data URI is a nice way to include a web resource without needing to make an HTTP request. Chris Coyier explains the technique nicely in Probably Don't Base64 SVG.
While a PNG might use Base64 encoding, for SVG, there is a better way.
Taylor Hunt's experiments led to this solution for optimizing SVGs in data URIs:
"So the best way of encoding SVG in a data URI is data:image/svg+xml,[actual data]. We don’t need the ;charset=utf-8 parameter (or the invalid ;utf8 parameter…), because URLs are always ASCII."
Here is a step-by-step method to create your encoded SVG string to include as a data URI:
-
1 run your SVG file through svgo.
-
2 In your text editor, replace all double quotes in your SVG file with single quotes. Make sure there are no line breaks.
-
2 Replace all non-ASCII and URL-unsafe characters by running your svg string through an encoding function like the one below—surround your
svgStringwith double quotes in the function's argument. -
1 Paste your encoded SVG into your html tag's
srcattribute or css's url call using double quotes, after thedata:image/sg+xml,prefix.
Examples:
HTML:
<img src="data:image/svg+xml,%3Csvg width='247' height='34' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23FFF' fill-rule='non.zero'%3E%3Cpath d='M13.918 ... 4.022-2.888 4.57V26h-4.46V7.975z' fill='%23D7DCE1'/%3E%3C/g%3E%3C/svg%3E"/>CSS:
.bg {
background: url("data:image/svg+xml,%3Csvg ... /svg%3E");
}Let me know if any questions.