Sometimes, you don’t get much control of the HTML, so being able to add something like an SVG icon, directly in your CSS is handy.
Luckily, CSS has us covered (pun-intended), with background-image
and data URIs.
- Code language
- css
p::before { content: ''; background-image: url('data:image/svg+xml;utf8,<svg fill="%23e67e22" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M14 9.5c0-.825.675-1.5 1.5-1.5h1c.825 0 1.5.675 1.5 1.5v1c0 .825-.675 1.5-1.5 1.5h-1c-.825 0-1.5-.675-1.5-1.5v-1zM20 24h-8v-2h2v-6h-2v-2h6v8h2z"/><path d="M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16S24.837 0 16 0zm0 29C8.82 29 3 23.18 3 16S8.82 3 16 3s13 5.82 13 13-5.82 13-13 13z"/></svg>'); width: 1.2em; height: 1.2em; background-size: cover; display: block; }
There’s some quirks with this approach—sure, but it’s a pretty handy approach to lean into if you need it. Just be aware that setting colour, like fill
is a bit fiddly. In the above example, I’ve escaped the #
of the hex code as %23
.
I would personally stray away from this method—instead, opting for inline SVG where possible. It gives a bit more control of things, overall—especially in terms of accessibility.
To learn more about how all of this works, I would strongly recommend that you watch this talk by CSS legend, Lea Verou.