J'ai un document SVG et j'aimerais y inclure une image svg externe, c'est-à-dire quelque chose comme:
<object data="logo.svgz" width="100" height="100" x="200" y="400"/>
("objet" est juste un exemple - le document externe sera SVG plutôt que xhtml).
Des idées? Est-ce seulement possible? Ou est-ce que la meilleure chose pour moi est de simplement gifler le xml logo.svg dans mon document SVG externe?
<image>
en SVG (ou<img>
ou<embed>
en HTML) pour référencer un fichier SVG, vous n'avez pas accès au DOM sous-jacent. En tant que tel, non, vous ne pouvez pas styliser des éléments à l'intérieur d'un élément SVG qui a été référencé par un<image>
.<image xlink:href="data:image/svg+xml;utf8,<svg …>… </svg>" />
. (Si vous utilisez JavaScript pour définir l'href
attribut, vous n'avez pas besoin d'échapper aux<
caractères, etc.)xlink:href
est obsolète , vous devez maintenant simplement utiliserhref
. Pourriez-vous mettre à jour votre réponse pour inclure cela?Ou vous pouvez en fait incorporer un svg enfant dans un svg parent comme ceci:
démo:
http://hitokun-s.github.io/old/demo/path-between-two-svg.html
la source
Il est à noter que lorsque vous intégrez des SVG dans un autre SVG avec:
alors le SVG incorporé prend une forme rectangulaire avec des dimensions données.
Autrement dit, si votre SVG incorporé est un cercle ou une forme autre qu'un carré, il devient alors un carré avec transparence. Par conséquent, les événements de souris sont piégés dans ce carré incorporé et n'atteignent pas le SVG parent. Attention à ça.
Une meilleure approche consiste à utiliser un modèle. Pour remplir une forme, soit un cercle, un carré ou même un tracé.
Ensuite, utilisez le modèle comme ceci:
Désormais, les événements de votre souris ne restent pas coincés dans des carrés d'image transparents!
la source
J'ai trouvé que l'utilisation de la
<image>
balise donnait un rendu de mauvaise qualité du fichier intégré. Cependant, la technique suivante a fonctionné (pour incorporer un fichier SVG dans un fichier SVG - pas nécessairement pour le rendu sur une page HTML):Modifiez le fichier SVG dans un éditeur de texte.
Trouvez la fin des métadonnées:
Insérez cette ligne après cette balise de groupe:
Dans ce cas, nous incluons OTHERFILE.svg dans le fichier, et tout le layer1 (le premier calque par défaut).
Enregistrez-le, puis ouvrez le fichier dans Inkscape.
Cette technique est utile pour avoir un arrière-plan ou un logo standard sur chaque page. En le mettant en premier dans le fichier, il sera rendu en premier (et donc en bas). Vous pouvez également le verrouiller en ajoutant cet attribut:
En d'autres termes:
la source
Remarque
xlink:href
est obsolète , utilisez simplement à lahref
place, par exempleviewBox
,width
et lesheight
valeurs (dans cette réponse) sont simplement à des fins d'illustration, ajustez la mise en page en conséquence (en savoir plus ).Depuis
<image>
partage des spécifications similaires à<img>
, ce qui signifie qu'il ne prend pas en charge le style SVG, comme mentionné dans la réponse de Christiaan . Par exemple, si j'ai la ligne css suivante qui définit la couleur de la forme svg pour qu'elle soit la même que la couleur de la police,Le style ci-dessus ne s'appliquerait pas s'il
<image>
est utilisé. Pour cela, vous devez utiliser<use>
, comme indiqué dans la réponse de Nick .La note
id="layer1"
et leshref="OTHERFILE.svg#layer1"
valeurs dans sa réponse sont obligatoires .Cela signifie que vous devez ajouter l'
id
attribut au fichier svg externe, vous devez donc héberger le fichier svg externe (modifié) par vous-même (votre site Web) ou ailleurs. Le fichier svg externe résultant ressemble à ceci (remarquez où je mets leid
):La valeur de id peut être n'importe quoi, j'utilise "logo" dans cet exemple.
Pour intégrer ce svg,
Si vous utilisez le svg ci-dessus en ligne dans votre html, vous n'avez pas besoin de l'attribut xmlns (du moins ce que je sais de svgo ).
la source
J'avais besoin d'intégrer un SVG dans mon SVG mais aussi de changer sa couleur et d'appliquer des transformations.
Seul Firefox prend en charge l'attribut "transform" sur les éléments svg imbriqués. Changer la couleur de <image> n'est pas non plus possible. Une combinaison des deux était donc nécessaire.
Ce que j'ai fini par faire était le suivant
Cela fonctionne au moins sur Firefox, Chrome et Inkscape.
Cela se comporte de la même manière que le svg enfant dans la réponse svg parent, à l'exception du fait que vous pouvez maintenant y appliquer des transformations.
la source