
Я хотел бы взять один небольшой файл SVG (создан в Inkscape) и встроить или связать его с другим (большим). При отображении в браузере я надеюсь увидеть, что меньший файл отображается внутри некоторого заполнителя большего.
Является ли это возможным?
решение1
Предпочтительнее <use>
, <image>
поскольку последний отображается с фиксированным разрешением и не масштабируется, как обычные векторные объекты в текущем документе.http://www.w3.org/TR/SVG11/struct.html#ImageElement
Но элемент <use>
не может ссылаться на целые файлы SVG, его xlink:href
атрибут является ссылкой на элемент/фрагмент в документе SVG (http://www.w3.org/TR/SVG11/struct.html#UseElement). Элемент «use» может ссылаться на любой локальный или нелокальный ресурс.
пример:
MyLibrary.svg:
<svg (...)>
<rect x="0" y="0" width="200" inkscape:label="upper-left-blue"
style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="upper-left-blue" height="200"/>
UseParts.svg:
<use x="0" y="0" width="400" xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="MyLibrary.svg#upper-left-blue" xlink:type="simple"
xlink:actuate="onLoad" height="400" id="use8793" xlink:show="embed"/>
Поддержка этой функции может различаться в разных редакторах/просмотрщиках SVG, но, насколько мне известно, она должна работать (по крайней мере) в Inkscape, Firefox и Batik.
решение2
Использоватьimage
элемент и ссылайтесь на ваш файл SVG. Ради интереса сохраните следующее как recursion.svg
:
<svg width="100%" height="100%" viewBox="-100 -100 200 200" version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<circle cx="-50" cy="-50" r="30" style="fill:red" />
<image x="10" y="20" width="80" height="80" xlink:href="recursion.svg" />
</svg>
Источник:https://stackoverflow.com/questions/5451135/embed-svg-in-svg/5451238#5451238