15: SVG Icon System – Wo die defs hingehen

Sobald wir haben, was wir unseren „defs-Block“ von SVG nennen – jenen Teil von SVG, der all die Dinge definiert, die wir später zeichnen wollen –, wo platzieren wir ihn? Bisher haben wir ihn direkt in den HTML-Code eingefügt, und das funktioniert absolut. Wenn wir ihn am Anfang der Seite lassen, sagen wir direkt nach dem öffnenden <body>-Tag

</head>

<body>

   <!-- include svg defs here -->

Das funktioniert in allen Browsern, die SVG unterstützen, hervorragend.

Es mag verlockend sein, dies nach unten zu verschieben. Vielleicht sind die Icons nicht super wichtig für die Seite, nicht so wichtig wie der eigentliche Inhalt, den die Seite liefern soll, also verschieben wir die Icons stattdessen ans Ende der Seite und verzögern deren Laden, wie wir es oft mit JavaScript tun. Wir versuchen dies im Video, aber es gab Probleme mit Safari, das die Icons, die wir später zu <use> versucht haben zu verwenden, überhaupt nicht gerendert hat. Um ehrlich zu sein, habe ich auch in anderen Browsern inkonsistentes Verhalten oder verschiedene Typen festgestellt, wenn ich es auf diese Weise mache, und es scheint, dass sich die Landschaft in dieser Hinsicht etwas verschiebt. Ich habe also gehört: <use> ist eine schwierige Sache zu implementieren. Am sichersten ist es, den Block oben zu platzieren, wenn Sie die defs direkt in Ihren Dokumenten behalten.

In diesem Video sehen wir uns einige grundlegende Tests dazu an und werfen dann einen Blick auf einige reale Websites, die dieses System nutzen, und wie/wo sie den SVG-Defs-Block einfügen.

Siehe den Pen 954e71cb5d5e79fb61d3c89bb3f21b8a von Chris Coyier (@chriscoyier) auf CodePen.

Hinweis

Ich mag den Begriff „SVG defs block“ – damit wir ihn als etwas bezeichnen können, das einen bestimmten Zweck hat, aber keine offizielle Bezeichnung. Aber man muss nicht immer tatsächlich ein <defs>-Tag verwenden. Wenn Sie <symbol>s verwenden, werden diese sowieso nicht von allein gerendert, und ich glaube auch nicht, dass sie innerhalb von <defs> sein sollen. Ich habe gehört, dass Definitionen von Verläufen in SVG dasselbe sind und nicht einmal funktionieren, wenn sie sich in den <defs> befinden. Unabhängig davon ist es immer noch ein „Block SVG-Code, den wir einfach definieren, um ihn später zu verwenden“, daher werde ich ihn wahrscheinlich weiterhin als „SVG defs block“ bezeichnen.