Stefan Judis hat einen "Today I Learned" (TIL) Beitrag veröffentlicht, der erklärt, wie SVG-Filter in CSS inline eingebettet werden können. Die Idee ist, dass CSS die `filter`-Eigenschaft hat, die einige eingebaute Funktionen unterstützt, wie z. B. `grayscale(100%)` und ähnliches.
Es kann aber auch auf einen von SVG definierten Filter verweisen. Sie könnten also filter: url(#my-custom-filter) verwenden, was in einem Inline-<svg> als <filter id="my-custom-filter"> enthalten ist. Es ist schon witzig, auf diese Weise auf das HTML verweisen zu müssen. Ein Filter ist etwas so Visuelles, dass es Sinn macht, ihn in CSS zu integrieren. Das sieht dann so aus
img {
filter: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg">\
<filter id="waves" x="-20%" y="-20%" width="140%" height="140%" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" color-interpolation-filters="linearRGB">\
<feTurbulence type="turbulence" baseFrequency="0.01 0.01" numOctaves="1" seed="1" stitchTiles="noStitch" result="turbulence" />\
<feDisplacementMap in="SourceGraphic" in2="turbulence" scale="20" xChannelSelector="G" yChannelSelector="A" result="displacementMap" />\
</filter>\
</svg>#waves')
;
}
Das ist Stefans Turbulenzfilter-Beispiel, etwas, das CSS allein definitiv nicht kann.
Schauen Sie sich all diese Backslashes (\) an. Man wünschte sich, CSS hätte Template-Literale, oder? Ich habe Bedenken, dass ein Code-Formatter oder Minifier damit Probleme haben könnte, aber ich weiß es nicht wirklich, vielleicht wäre es in Ordnung.
Das Schöne ist, dass das SVG ziemlich intakt bleibt (lesbar und editierbar). Hier können Sie also den SVG-Filter in CSS bearbeiten und herumspielen
Ich denke auch an Yoksel's Werkzeuge. Dieser Editor für zwei- und dreifarbige Bilder ist so cool. Ich kann einen dieser Filter nehmen und ihn ebenfalls in CSS einfügen
Filter sind aber nicht die einzige Art von SVG, die Sinn macht, in CSS einzufügen. Sie können auch direkt SVG-Zeichnungen in CSS einfügen.
Das funktioniert überall außer Safari in einem schnellen Test in modernen Browsern. Aber ich denke, in nicht allzu ferner Vergangenheit mussten wir mehr Sonderzeichen im SVG kodieren, damit es funktioniert (obwohl Sie nicht auf Base64 zurückgreifen mussten). Yoskels URL-Encoder ist genau dafür da – ich weiß nur nicht, ob er noch notwendig ist.
Ich habe das kürzlich verwendet, als ich ein Icon platzieren musste und benutzerdefiniertes CSS die schnellste/einfachste Lösung war. Ich war enttäuscht, als ich feststellte, dass ich die Farbe des SVG-Vektors nicht mit CSS ändern konnte und das SVG für den Hover-Zustand mit einem anderen Füllwert erneut einfügen musste.
Sie könnten das Schlüsselwort
currentcolorausprobieren. Ich weiß nicht, ob es hier funktioniert, aber es funktioniert sehr gut für eine Vielzahl von dynamischen Farbverwendungszwecken, einschließlich des Stylings externer Definitionen, auf die mit einemuse-Tag verwiesen wird.Das funktioniert über
mask-image!Sie würden also
Theoretisch ist das ein schwarzes Quadrat, aber aufgrund von
mask-imageist nur die Form Ihres SVG-Icons sichtbar (wie ein Stempel), und Sie können diebackground-colornach Belieben ändern!mask-imageunterstützt alles, wasbackgroundunterstützt, daher sollten Sie auch mit Schlüsselwörtern wiecontainundno-repeatexperimentieren.Danke für den Hinweis! Ich habe gerade nach einer Möglichkeit gesucht, eine GIF-Ladeanimation durch SVG zu ersetzen, und das hat mir das ermöglicht.
Beim Herumspielen in CodePen habe ich festgestellt, dass ich es kodieren musste, damit es in Chrome 88 funktioniert.
Ich habe vor Jahren ein Hilfsprogramm zum Testen verschiedener Arten von Farbenblindheit entdeckt, das dies nutzt.
https://github.com/hail2u/color-blindness-emulation
Backslashes? Packen Sie die Daten einfach in eine Variable!
Ich bin mir nicht sicher, ob das bei den Zeilenumbrüchen hilft? Hilft es? (Die Zeilenumbrüche sind ja nützlich für Lesbarkeit und Bearbeitbarkeit.)
Wieder ein Fall, in dem CSS-in-JS glänzt