Bonjour,
Enfin !
Donc l'explication est la suivante. Quand tu mets un svg comme valeur de l'attribut src d'une balise <img>, tu ne peux pas mettre à l'intérieur de ce svg des <image> avec des liens vers d'autres images : le navigateur ne retrouve pas les images. Ce n'est donc pas ton <svg> qui a un problème, mais la méthode employée pour l'insérer dans la page qui n'est pas appropriée.
Voici un lien qui explique les différentes méthodes possibles. Certaines vont fonctionner avec des <image> référencées par des liens, d'autres pas :
https://vecta.io/blog/best-way-to-embed-svg
L'article ne parle pas des images référencées par des liens à l'intérieur du <svg>. Il faut tester.
Un autre lien ici :
https://www.alsacreations.com/tuto/lire/1421-svg-initiation-syntaxe-outils.html
Parmi ces méthodes, il y a l'utilisation d'une balise <iframe> (qui est déconseillée, mais qui marche avec des images référencées par des liens), et l'utilisation d'une balise <img> qui ne marche que si les images sont sous forme de data:image base64 (à ma connaissance; je peux me tromper).
Note que lorsque les images sont référencées par des liens, ton svg est certes plus petit, mais le navigateur devra quand même télécharger ces images. En terme de rapidité, il n'est pas facile de savoir ce qui sera le plus efficace au final entre images référencées par des liens et images sous forme de data:image base64, car il faudra bien que les octets définissant ces images soient envoyés au navigateur dans tous les cas.
Je préfère pour ma part mettre directement la balise <svg> dans le html au lieu d'utiliser une balise <img>. Et dans ce cas, les images dans le svg peuvent être référencées par des liens. Si par exemple tu utilises php, le code pour inclure le svg sera simplement :
<?php include "base-arbre-1026x723-texte-vectorise-sans-phonemes.svg";?>
C'est un peu plus "compliqué" à gérer que les autres méthodes parce que le <svg> n'étant pas encapsulé, il sera éventuellement involontairement modifié par la feuille de style de la page. Mais c'est aussi un avantage car tu pourras justement modifier volontairement le rendu de ce <svg> via le css de ta page assez facilement.
EDIT: pour cette méthode, il faut aussi faire attention aux ids des éléments internes du svg, qui doivent être différents de ceux présents par ailleurs dans la page. Un moyen de régler ça est de préfixer ou suffixer tous ces ids via un script dans un langage quelconque, ou bien via un chercher-remplacer d'un éditeur de texte.
Amicalement,
Modifié par parsimonhi (05 Feb 2021 - 18:39)