SVG g-Tag, symbol- und link-Tag

SVG LINKS mit xlink:href

Damit Links in die SVG-Grafik gesetzt werden können, muss im SVG-Tag der xlink-Namespace xmlns:xlink="http://www.w3.org/1999/xlink" stehen. Dann kann ein Link auf Texte oder beliebige Formen gesetzt werden – nicht anders als in einer HTML-Datei.

Links in externen SVG-Dateien

Klick- bzw. touchbare Links funktionieren allerdings nicht, wenn eine externe SVG-Datei mit HTML img eingebunden wird. Die Grafik muss entweder als object, iframe oder inline in die HTML-Seite eingebettet sein.

Externe Grafiken werden ohne xlink-Namespace nicht angezeigt und die Fehlermeldung erscheint:

Namespace prefix xlink for href on a is not defined

Dabei werden Textlinks nicht wie in HTML automatisch unterstrichen, sondern zeigen sich nur beim Hovern mit der Maus durch den Hand-Cursor. Erst ein text-decoration: underline, farbliches Herausstellen mit style-Attributen des a-Tags bringt den Link optisch zum Vorschein.

<a xlink:href=""> … </a>
Pfeil-nach Rechts
<svg>
…
   <a xlink:href="/tutorial/svg.html">
      <text font-size="61" y="225" x="28" fill="#ffb380">LINK</text>
   </a>
   
   oder
   
   <text font-size="61px" y="225" x="28" fill="#ffb380">
      <a xlink:href="/tutorial/svg.html">LINK</a>
   </text>
   
…
</svg>

Wenn die SVG-Grafik in einem HTML-Dokument liegt, reicht ein einfaches SVG <a xlink:href=""> – xmlns:xlink="http://www.w3.org/1999/xlink" muss nicht im SVG-Tag notiert werden werden.

Links auf SVG-Formen und Gruppen

Genauso wieder wie bei HTML funktionieren klickbare Links in SVG nicht nur auf Text, sondern auf allen Elementen: rect, circle, path und group.

Fast immer es sogar besser, Links nicht auf SVG-Text zu setzen, denn der Text bildet keinen geschlossenen Block wie Text in HTML, sondern ein Klick muss schon den Strich der Zeichen treffen.

SVG Link auf G Group und path
<a xlink:href="/tutorial/svg.html">
<g id="leafe" style="cursor:pointer">
  <path style="fill:hsl(190,30%,50%);stroke:hsla(190,60%,50%,0.2);stroke-width:14" d="…" />
  <path style="fill:hsl(190,30%,80%)" d="…" />
  <path id="overlay" style="fill:hsla(0,0%,100%,0.2)" d="…" />
</g>
</a>
<a xlink:href="/tutorial/svg-viewbox-koordinaten.html">
  <use transform="translate(6,580) rotate(-90)" xlink:href="#leafe" />
</a>

Das gilt auch für die Klick- und Touchziele in animierten SVGs:

<text y="46" x="29" fill="#f36841">Hosting</text>
<text fill="#95ba4c" x="29" y="84">Themes</text>
<text fill="#00a2c4" x="29" y="122">Plugins</text>
<rect id="hosting" fill-opacity="0" style="cursor:pointer" x="29" y="18" width="100" height="35"  />
<rect id="themes" fill-opacity="0" style="cursor:pointer" x="29" y="58" width="100" height="35"  />
<rect id="plugins" fill-opacity="0" style="cursor:pointer"x="29" y="98" width="100" height="35"  />

Darum liegen hier Rechtecke mit fill-opacity="0" über dem Text. Sie vergrößern die klick-sensitive Fläche für die Javascript-Animation.

SVG LINKS Pfeil-nach Rechts LINK 01 02 03 04