Embed SVG in SVG?
Use the image
element and reference your SVG file. For fun, save the following as recursion.svg
:
<svg width="100%" height="100%" viewBox="-100 -100 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg"> <circle cx="-50" cy="-50" r="30" style="fill:red" /> <image x="10" y="20" width="80" height="80" href="recursion.svg" /></svg>
Or you can actually embed child svg in parent svg like this:
<svg> <g> <svg> ... </svg> </g></svg>
demo:
http://hitokun-s.github.io/old/demo/path-between-two-svg.html
It is worth mentioning that when you embed SVGs into another SVG with:
<image x="10" y="20" width="80" height="80" xlink:href="image.svg" />
then the embedded SVG takes a rectangular shape with given dimensions.
That is to say, if your embedded SVG is a circle or some shape other than a square, then it becomes a square with transparency. Therefore, mouse events get trapped into that embeded square and do not reach the parent SVG. Watch out for that.
A better approach is using a pattern. To fill a shape, either a circle, a square or even a path.
<defs> <pattern id="pat" x="0" y="0" width="500" height="500" patternUnits="userSpaceOnUse"> <image x="0" y="0" width="500" height="500" xlink:href="images/mysvg.svg"></image> </pattern></defs>
Then use the pattern like this:
<circle cx="0" cy="0" r="250" fill="url(#pat)"></circle>
Now your mouse events do not get stuck into transparent image squares!