J'ai un objet SVG dans ma page HTML et je l'encapsule dans une ancre, donc lorsque vous cliquez sur l'image svg, l'utilisateur accède au lien d'ancrage.
<a href="http://www.google.com/">
<object data="mysvg.svg" type="image/svg+xml">
<span>Your browser doesn't support SVG images</span>
</object>
</a>
Lorsque j'utilise ce bloc de code, cliquer sur l'objet svg ne m'amène pas à google. Dans IE8 <le texte de la plage est cliquable.
Je ne veux pas modifier mon image svg pour contenir des balises.
Ma question est la suivante: comment puis-je rendre l'image svg cliquable?
<img>
avec une référence aux données svg ne fonctionne pas toujours comme prévu, même dans la dernière version de Chrome :( stackoverflow.com/questions/15194870/…<object>
balise et ajouter unepoint-event: none;
pour la rendre cliquable. Il préserve l'accès à votre code source svg et vous permet de le manipuler dynamiquement.img
n'est pas toujours une option. Dans mon cas, j'ai besoin de manipuler le svg, ce qui ne peut pas être fait correctement viaimg
, je dois utiliserobject
.En fait, la meilleure façon de résoudre ce problème est ... sur la balise <object>, utilisez:
Remarque: les utilisateurs qui ont installé le plugin Ad Blocker obtiennent un onglet [Block] dans le coin supérieur droit lors du survol (le même que celui d'une bannière flash). En paramétrant ce css, cela disparaîtra également.
http://jsfiddle.net/energee/UL9k9/
la source
img
avec svg rend alors inutilisable pour changer les styles SVG internes.J'ai eu le même problème et j'ai réussi à le résoudre en:
Emballage de l'objet avec un élément défini sur block ou inline-block
Ajout au
<a>
tag:et au
<span>
tag:et au
<object>
tag:Voir un exemple ici: http://dabblet.com/gist/d6ebc6c14bd68a4b06a6
Trouvé via le commentaire 20 ici https://bugzilla.mozilla.org/show_bug.cgi?id=294932
la source
Je voudrais m'en attribuer le mérite, mais j'ai trouvé une solution ici:
https://teamtreehouse.com/forum/how-do-you-make-a-svg-clickable
ajoutez ce qui suit au css pour l'ancre:
Link fonctionne sur le svg et sur le fallback.
la source
Vous pouvez également coller quelque chose comme ça au bas de votre SVG (juste avant la
</svg>
balise de fermeture ):Ensuite, modifiez simplement le lien en conséquence. J'ai utilisé 100% de largeur et de hauteur pour couvrir le SVG dans lequel il se trouve. Le crédit de la technique revient aux gens intelligents de Clearleft.com - c'est là que je l'ai vu pour la première fois.
la source
Une simplification de la solution de Richard. Fonctionne au moins dans Firefox, Safari et Opera:
Voir http://www.noupe.com/tutorial/svg-clickable-71346.html pour des solutions supplémentaires.
la source
block
ouinline-block
sur le parent<a>
.inline-block
dans certains cas, maisblock
semblait bien fonctionner sur d'autres cas; Je suppose que cela dépend des blocs englobants ...Pour ce faire dans tous les navigateurs, vous devez utiliser une combinaison des méthodes @energee, @Richard et @Feuermurmel.
Ajouter:
pointer-events: none;
le fait fonctionner dans Firefox.display: block;
le fait fonctionner dans Chrome et Safari.z-index: 1; z-index: -1;
le fait également fonctionner dans IE.la source
object
sera maintenant dans un contexte d'empilement inférieur (sous) à celui de son parent.J'ai également résolu ce problème en modifiant le fichier svg.
J'ai enveloppé le xml de tout le graphique svg dans une balise de groupe contenant un événement de clic comme suit:
La solution fonctionne dans tous les navigateurs prenant en charge le script svg objet. (par défaut, une balise img à l'intérieur de votre élément objet pour les navigateurs qui ne prennent pas en charge svg et vous couvrirez la gamme des navigateurs)
la source
<svg>
élément externe et ne pas l'envelopper du tout ne fonctionnait pas?J'ai essayé cette méthode simple et propre et semble fonctionner dans tous les navigateurs. À l'intérieur du fichier svg:
la source
Ne l'utilisez pas
<object>
. Voici une solution qui a fonctionné pour moi avec<a>
et les<svg>
balises:la source
Faites-le avec javascript et ajoutez un
onClick
-attribut à votreobject
-element:la source