Wir haben "Inline-SVG" behandelt – das bedeutet, dass Sie die SVG-Syntax direkt in HTML einfügen. Sie können dieses gleiche Inline-SVG auch an anderen Stellen verwenden, z. B. in einem <img> oder als background-image. Das ist ziemlich seltsam.
Es ist so:
<img src='data:image/svg+xml;utf8,<svg ... > ... </svg>'>
Sie fügen die gesamte SVG-Syntax dort ein, wo Sie den <svg>-Beginn sehen.
Ebenso in CSS
.bg {
background: url('data:image/svg+xml;utf8,<svg ...> ... </svg>');
}
Darüber hinaus können Sie SVG in Base64-Kodierung umwandeln, und das funktioniert auch als Data URI, wie z. B.
<img alt="" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo etc">
Und das funktioniert auch in CSS (wahrscheinlich auch an anderen Stellen, überall dort, wo Sie eine Grafik verwenden würden).
Siehe den Pen SVG mit Data URI (mehrere Wege) von Chris Coyier (@chriscoyier) auf CodePen.
Ich bin mir nicht sicher, welche Vorteile die Verwendung von
data:image/svg+xml;utf8gegenüber der Verwendung von einfachem Inline-SVG hat?Ein möglicher Punkt ist das DOM-Gewicht. Bei Inline-SVG sind alle Formen im DOM, während
<img>nur dieser eine DOM-Knoten ist.Wir verwenden Data URIs für wiederkehrende Icons. Sie können eine CSS-Klasse haben, die Sie überall dort anwenden können, wo Sie das Bild haben möchten. Wenn Sie versuchen, jedes kleinste bisschen Leistung herauszukitzeln, kann das eine gute Strategie sein.
Stattdessen können Sie SVG-Icons über das
<use />-Tag wiederverwenden.Base64 ist eine Kodierung.
UTF-8 verwendet hauptsächlich 1 Byte (eine Zahl von 0-255) für jedes Zeichen. (Dies gilt, wenn Sie nur Zeichen verwenden, die nicht mehr benötigen, wie z. B. in einem typischen SVG.) Base64 kann beliebige Binärdaten, wie z. B. eine SVG-Textdatei oder eine Bilddatei, nehmen und 64 verschiedene Zeichen verwenden, um diese Daten zu kodieren.
Hellowird zuSGVsbG8K, und'I just broke CSS;wird zuJ0kganVzdCBicm9rZSBDU1M7Cg==, was in eine CSS-Zeichenkette eingefügt werden kann.Es wird Ihre Datei immer größer machen, aber sicherstellen, dass Sie sie überall dort einfügen können, wo Sie die 64 Zeichen von Base64 verwenden können. In CSS brechen Ihre Zeilenumbrüche das Dokument, aber in Base64 sind sie kodiert, sodass es kein Problem gibt. Es ist hauptsächlich nützlich für Dateien mit Zeichen, die Sie nicht in Ihr Dokument einfügen können. Wenn Sie ein PNG in Ihrem Texteditor öffnen und versuchen, es in eine CSS-Datei zu kopieren und einzufügen, wird das wahrscheinlich nicht gut enden. ;)
Wie wäre es mit Base64-kodierten SVG-Filtern in Dateien… Dann Webpack sie in filter:url(require(‘blur.svg’)); – Das ist doch mal ein Anwendungsfall. Css backdrop filter frühzeitig, irgendwer?
list-style-image funktioniert mit dem folgenden Code einwandfrei, aber der Hover-Effekt funktioniert nicht. Hover funktioniert, wenn Tags in HTML sind, aber nicht in CSS. Jede Lösung wäre eine große Hilfe. Vielen Dank im Voraus.
Base64-Kodierung ist nicht die einzige verfügbare Option. Zum Beispiel erwartet es standardmäßig eine URI-Kodierung. Wenn Sie sich dazu entschließen, könnten Sie eine gesamte SVG-Datei URI-kodieren. Wenn Sie bereits einen Präprozessor wie LESS oder SASS verwenden, gibt es möglicherweise nicht viel Vorteil, dies auf diese Weise zu tun. Ohne Präprozessor macht die URI-Kodierung es etwas weniger umständlich, mit Farbwerten zu spielen. Dies kann ein echter Segen sein, wenn Sie mit einem unentschlossenen Designer arbeiten.
Wenn ich ein SVG-Icon generiere, den Base64-kodierten String speichere und diesen String in tausend img-Tags verwende, muss der Browser den String für jedes img-Tag dekodieren und das SVG neu parsen?
Kann ich ein animiertes SVG als Hintergrundbild für ein Div verwenden, das es mir ermöglicht, Textinhalte darin einzugeben?
Nur geraten, ohne ein Beispiel zu sehen, aber Sie *könnten* das tun. Schauen Sie sich diesen aktuellen Beitrag an, in dem ein Hintergrundbild direkt in der
background-image-Eigenschaft animiert wurde. Ich stelle mir vor, dass Sie auch eintext-Element im SVG-Markup verwenden können. Aber Sie sehen, wie das schnell schwierig zu verwalten wird.Ich bin quasi gezwungen, dies in LeafletJS für benutzerdefinierte Marker zu verwenden (ich möchte keine PNGs verwenden), aber ich kann jetzt nicht herausfinden, wie ich dynamisch neue Klassen anwenden kann. Ganz einfaches
on hover-Styling kann mit CSSfiltergemacht werden, aber nicht viel. Ziemlich grundlegend. Aber ich hätte gerne ein schickes Styling, wie z. B. Umrandungen, mehrfarbige Segmente und so weiter. Daher muss ich Klassen anwenden. Ich bin mir nicht sicher, wie ich das erreichen kann. Ein Grund, warum ich SVG verwenden möchte, ist, dass ich dynamische Textwerte hinein übergeben kann.Zum Beispiel – ein einfacher LeafletJS-Marker
Ich wäre dankbar für Links/Ressourcen.
Data URIs sind sehr nützlich, um sie in Dokumente einzufügen, einige winzige Icons, bei denen ein ganzes Inline-SVG-Element den Markup unübersichtlich erscheinen lassen könnte, verringert das DOM-Gewicht. Hält den Markup sauber :)
Ist es möglich, die obigen Daten:image/svg+xml;charset=utf-8 als PNG-Bild zu speichern? Bitte helfen Sie
Ein Vorteil von Data URIs für SVG-Bilder im img-Tag ist hilfreich für die Erstellung von PDFs mit WKHTMLTOPDF und anderen PHP-PDF-Bibliotheken.
Gibt es eine Möglichkeit, eine Data URI zu verwenden, die Zeilenumbrüche enthält?
Wenn ich mich nicht irre, ist der Teil, dass man einfach ein SVG in eine Data URL einfügen kann, falsch. Viele SVGs enthalten z. B. '#'. SVGs in Zeichenketten müssen zuerst kodiert werden, z. B. mit window.encodeURIComponent(svg).
<img src=`data:image/svg+xml;utf8,${window.encodeURIComponent(` …
)}>Die Handhabung von Data URIs variiert stark zwischen verschiedenen Browsern.
Referenz: https://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-September/075456.html
Danke, ich hatte keine Ahnung, was SVG ist und wie es verwendet wird, aber das Verständnis, dass es sich um eine Reihe von Anweisungen für ein Bild handelt und wie es in CSS-Dateien verwendet wird, war hilfreich… kein Entwickler
Die korrekte Syntax ist
;charset=utf-8, nicht;utf8, aber es funktioniert beides, da UTF-8 die Standardkodierung für SVG ist.David Waterman hat Recht, einige Sonderzeichen müssen in einer Data URI kodiert werden, insbesondere '#' (%23) und '%' (%25). Bitte korrigieren Sie den obigen Artikel.
#12: data:image/svg+xml;utf-8 reicht aus, ist aber nicht veraltet.
Die SVG-Unterstützung für Data URIs wurde mit Wirkung vom Dezember 2023 eingestellt. https://developer.chrome.com/blog/migrate-way-from-data-urls-in-svg-use
Nur für das Element in SVGs, nicht innerhalb von CSS.
Von der von Ihnen verlinkten Seite: „Die SVG-Spezifikation wurde kürzlich aktualisiert, um die Unterstützung für Data-URLs im SVG-Element zu entfernen.“