<symbol>
allows you to embed the SVG code as well as have it’s own viewBox
attribute<symbol>
element can only be rendered to the browser when referenced by the <use>
element.id
which we will use to reference itviewBox
property too. The first two values will almost always be “0 0”, the second two will be equal to the size of the icon you have exportedviewBox
in <use>
instead of sprites. Add that to media queries and you can display only symbol instead a full logo without an extra sprite for that.<symbol>
is a better wrapper as compared to <g>
. Because a) you can define the viewBox
directly on the <symbol>
and then not need one when you <use>
it later in an <svg>
, and b) <symbol>
can have it’s own <title>
and <desc>
tags.<symbol>
will have an id
for your icon and have all the <path>
values 1<svg style="display:none;"> <!-- hide it by default so it doesn't render empty space -->
2
3 <!-- Icons go here, each icon will be warpped as a `symbol` -->
4
5 <symbol id="aircraft" viewBox="0 0 62 51">
6 <path fill="#000000" d="M38.9872..."></path>
7 </symbol>
8
9 <symbol id="brush" viewBox="0 0 62 62">
10 <path fill="#000000" d="M7.8416..."></path>
11 </symbol>
12
13</svg>
1<svg>
2 <use xlink:href="#aircraft"></use>
3<svg>
you can use the svg’s from an external svg sprite as well by prefixing the identifier by the path to the file something like this:
1<svg>
2 <use xlink:href="path/to/icons.svg#aircraft"></use>
3</svg>
<path>
in different sizesYou can use the same path in different sizes and control the sizes by CSS. Just be careful when setting the viewPort
attributes within your SVG file.
1<svg>
2 <title>small icon</title>
3 <use class="small" xlink:href="#aircraft"></use>
4</svg>
5<svg>
6 <title>big icon</title>
7 <use class="big" xlink:href="#aircraft"></use>
8</svg>
1.small { width: /*small size*/ }
2.big { width: /*big size*/ }