SVG `use` mit externer Quelle

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Es gibt einen weiteren, neueren Artikel zu diesem Thema, der einige neuere Informationen behandelt.

Inline-SVG ist eine großartige Möglichkeit, SVG zu verwenden, unter anderem deshalb, weil die einzelnen Formen, aus denen die Grafik besteht, skript- und stilgesteuert werden können. Die Formen befinden sich direkt im DOM. Aber bedeutet das, dass wir diese Formen auf jeder Seite direkt im HTML definieren müssen? Nein, wir können <use> verwenden, um sie von anderswo zu referenzieren. Idealerweise ist dieses "Anderswo" eine externe Datei, da diese Datei vom Browser zwischengespeichert werden kann, Effizienz!

Hier ist, was ich meine

<!-- `<use>` shape defined ON THIS PAGE somewhere else -->
<svg viewBox="0 0 100 100">
   <use xlink:href="#icon-1"></use>
</svg>

<!-- `<use>` shape defined in an EXTERNAL RESOURCE -->
<svg viewBox="0 0 100 100">
   <use xlink:href="defs.svg#icon-1"></use>
</svg>

Also ja: externe Ressource = der Weg zum Ziel.

Aber die Methode mit der externen Ressource funktioniert in keiner Version (bis zu 11 getestet) von Internet Explorer. Selbst in den Versionen, die Inline-SVG unterstützen: 9, 10, 11.

Glücklicherweise hat Jon Neal eine clevere Lösung. Es ist ein kleines Skript namens SVG for Everybody. Die Idee ist folgende: Verwenden Sie einfach <use>, als ob es funktionieren würde, und das Skript kümmert sich darum in IE 9, 10, 11. Ein Polyfill, nur für dieses Szenario (es funktioniert nicht irgendwo anders, wo Inline-SVG-Nutzung nicht bereits unterstützt wird).

Es funktioniert so

  1. Wenn der Browser IE 9, 10 oder 11 ist (User-Agent-Sniffing, aber das ist hier der Sinn der Sache).
  2. Ajax für die referenzierte SVG-Datei
  3. Finde das benötigte Teil, basierend auf der referenzierten ID (z. B. #icon-1)
  4. Füge dieses in das <svg> auf der Seite ein

Es funktioniert total.

Ich finde Inline-SVG verdammt nützlich und dieses (winzige) Skript bedeutet, dass Sie es auf verantwortungsvollere (cachable) Weise nutzen können.