SVG use Element
Jakob Jenkov |
The SVG <use>
element can reuse an SVG shape from
elsewhere in the SVG document, including <g>
elements and <symbol>
elements.
The reused shape can be defined inside the <defs>
element (which makes the shape invisible until used)
or outside.
A use Example
Here is a simple example of the <use>
element:
<svg> <defs> <g id="shape"> <rect x="50" y="50" width="50" height="50" /> <circle cx="50" cy="50" r="50" /> </g> </defs> <use xlink:href="#shape" x="50" y="50" /> <use xlink:href="#shape" x="200" y="50" /> </svg>
This example shows a <g>
element defined inside a
<defs>
element. This makes the <g>
invisible unless referenced by a <use>
element.
Before the <g>
element can be referenced, it must have
an ID set on it via its id
attribute. The <use>
element references the <g>
element via its xlink:href
attribute. Notice the #
in front of the ID in the attribute value.
The <use>
element specifies where to show the reused shapes via
its x
and y
attributes.
Notice that the shapes inside the <g>
element are located
at 0,0. That is done because their position is added to the position specified
in the <use>
element.
Here is the resulting image:
The blue dots are not part of the example. They are added to show the x and y of
the two <use>
elements.
Using Shapes Outside of a defs Element
The <use>
element can reuse elements from anywhere in an SVG image as long
as that shape has an id
attribute with a unique value. Here is an example:
<svg width="500" height="110"> <g id="shape2"> <rect x="0" y="0" width="50" height="50" /> </g> <use xlink:href="#shape2" x="200" y="50" /> </svg>
This example defines a <g>
element with a <rect>
element inside.
Then it reuses the <g>
element (including the nested <rect>
element)
via a <use>
element.
Here is the resulting image:
Notice that both the original shape and its reused version are shown. That is happening because the shape that
is reused (the <g>
element) is not defined inside the <defs>
element
or <symbol>
element. Therefore it is visible.
Again, the blue dot shows the coordinates of the <use>
element.
Setting CSS Styles
You can set the CSS styles when reusing a shape, if the original shape
has no CSS style set on it. You simply specify
the styles to set inside the style
attribute of the <use>
element.
Here is an example:
<svg width="500" height="110"> <g id="shape3"> <rect x="0" y="0" width="50" height="50" /> </g> <use xlink:href="#shape3" x="100" y="50" style="fill: #00ff00;"/> <use xlink:href="#shape3" x="200" y="50" style="stroke: #00ff00; fill: none;"/> </svg>
Notice how the original shape has no style
attribute set on it.
It will then be rendered with default styles (typically black).
Tweet | |
Jakob Jenkov |