Es gibt viele verschiedene Möglichkeiten, SVG zu verwenden. Je nachdem, wie Sie es verwenden, unterscheidet sich die Taktik zum Einfärben dieses SVG in verschiedenen Zuständen oder Bedingungen – :hover, :active, :focus, Klassennameänderung usw.
Schauen wir uns die Möglichkeiten an.
Inline-SVG
Inline-SVG ist sowieso meine bevorzugte Art, SVG zu verwenden, teilweise wegen der einfachen Zugänglichkeit und Gestaltung des SVG.
Siehe den Pen
bJXNyy von Chris Coyier (@chriscoyier)
auf CodePen.
Wenn Sie mit Icon-Fonts vertraut sind, wird Ihnen vielleicht gefallen, wie einfach es ist, die Farbe zu ändern. Bei Icon-Fonts sind Sie weitgehend auf eine einzige Farbe beschränkt, während SVG dies nicht ist. Dennoch ist es ansprechend einfach, diese eine Farbe mit color zu ändern. Mit Inline-SVG können Sie fill festlegen, was auf alle Elemente innerhalb des SVG angewendet wird, oder Sie können jedes Element separat füllen, falls erforderlich.
SVG-Symbol / Use
Es gibt so etwas wie einen SVG-Sprite, der eine Gruppe von SVGs ist, die in <symbol>-Elemente umgewandelt werden, sodass jedes gegebene Symbol leicht mit einem <use>-Element referenziert werden kann.
Siehe den Pen
Use SVG Hovers von Chris Coyier (@chriscoyier)
auf CodePen.
Sie können die Füllfarbe auf diese Weise immer noch relativ einfach von außerhalb des CSS festlegen, aber es gibt Einschränkungen.
- Die internen SVG-Elemente (wie das
<path>) dürfen keine eigene Füllung haben. Dies ermöglicht, dass die von der übergeordneten SVG festgelegte Füllung in den Shadow DOM gelangt, der von<use>erstellt wird. Sobald Sie etwas wie<path fill="blue" ... />im<symbol>haben, haben Sie die Kontrolle durch externes CSS verloren. - Ebenso kann die
filleinzelner Elemente nicht innerhalb des SVG gesteuert werden, wie es bei Inline-SVG möglich war. Das bedeutet, dass Sie ziemlich fest im Einzelfarb-Bereich sind. Das deckt sowieso die meisten Anwendungsfälle ab, ist aber dennoch eine Einschränkung.
SVG-Hintergrundbilder
SVG kann als Hintergrundbild gesetzt werden, genau wie PNG, JPG oder jedes andere Grafikformat. An diesem Punkt haben Sie weitgehend aufgegeben, die fill ändern zu können. Eine Möglichkeit, die meiner Meinung nach keine besonders gute ist, besteht darin, zwei Versionen jedes Symbols in den jeweiligen Farben zu haben und zwischen ihnen zu wechseln.
Siehe den Pen
Background SVG Hovers von Chris Coyier (@chriscoyier)
auf CodePen.
Ich mache Ihnen keinen Vorwurf, wenn Sie Quellen nicht wechseln möchten, daher ist eine weitere Möglichkeit, mit Filtern herumzuspielen.
Siehe den Pen
Background SVG Hovers with Filters von Chris Coyier (@chriscoyier)
auf CodePen.
Der Versuch, die richtigen Filter zu finden, um die Farbe richtig einzustellen, ist schwierig. Glücklicherweise hat Barrett Sonntag ein Werkzeug entwickelt, um die Filter für Sie zu berechnen! Aus Schwarz wird Rot mit einer verrückten Kombination wie dieser: invert(27%) sepia(51%) saturate(2878%) hue-rotate(346deg) brightness(104%) contrast(97%);.
SVG hat auch object, was ziemlich praktisch ist, da es früher eine eingebaute Fallback-Option hatte – obwohl die Browserunterstützung heutzutage so gut ist, dass ich es ehrlich gesagt noch nie benutzt habe. Aber wenn Sie es verwenden, müssten Sie wahrscheinlich diese filter-Technik verwenden, um die Farbe beim Hovern zu ändern.
Siehe den Pen
Background SVG Object Hovers von Chris Coyier (@chriscoyier)
auf CodePen.
Eine Maske anstelle eines Hintergrundbildes verwenden
Auf diese Weise ist das SVG immer noch für das Zeichnen der Form verantwortlich, aber die Farbe stammt von der background-color (oder dem Bild! oder dem Gradienten!) dahinter und nicht vom SVG selbst.
Siehe den Pen
Background SVG Hovers with Mask von Chris Coyier (@chriscoyier)
auf CodePen.
SVG-Hintergrundbilder als Daten-URLs
Das ändert nicht viel im Vergleich zu oben, aber es eröffnet eine interessante Möglichkeit: die Verwendung einer Variablen für die internen Füllungen. Hier mit Sass, das die URLs als Variablen beibehält.
Siehe den Pen
Background SVG Hovers with Data URL variables von Chris Coyier (@chriscoyier)
auf CodePen.
Das können Sie auch mit nativen CSS-Custom-Properties machen!
Insgesamt ist
<use>meine bevorzugte Methode zur Implementierung von SVG-Icons. Sie erhalten die Vorteile von Inline-SVGs, ohne riesige Blöcke von SVG-Code in Ihren HTML-Dateien handhaben zu müssen. Nicht nur das, sondern auch das HTML selbst wird lesbarer, da Sie ein kleines, selbsterklärendes (durch die definierte ID) Element haben. Außerdem können Sie alles in einer einzigen separaten SVG-Datei aufbewahren, die eine ordnungsgemäße Organisation in Illustrator über Ebenen sowie eine gute Lesbarkeit in einem Texteditor ermöglicht.Danke für den Artikel. Gute Auffrischung!
Danke für den Artikel. Ich bevorzuge auch die
use-Methode. Gibt es Probleme, den SVG-Symbol-Code im Footer zu platzieren?Ist es außerdem besser, die Füllfarbe zu erben? https://codepen.io/vj/pen/EzgqeK
Danke, Mann, es hat meine Meinung geändert, von Maske zu benutzen.
Gibt es auch die Methode, auf einen Anker oder eine ID im SVG-Bild zu verweisen und nur das anzuzeigen?! Ich kann mich nicht wirklich erinnern, aber es war etwas wie
url(image.svg#red-one). Können Sie das auch behandeln?!Diese Methode habe ich in Teil 80 meines Inkscape-Tutorials für Full Circle Magazine (kostenloser Download) behandelt: http://fullcirclemagazine.org/issue-140/
Im Grunde wird der CSS-Selektor :target verwendet, um nur eine bestimmte Gruppe im Bild anzuzeigen. Der vorherige Artikel (in Ausgabe 139) enthielt auch eine Methode, um einen ähnlichen Effekt mit viewBox und/oder benannten Ansichten im SVG zu erzielen.
Inline und URL-kodiertes SVG sind großartig, besonders wenn man bedenkt, wie gut gzip mit duplizierten Code-Teilen umgeht, sodass selbst wenige Varianten desselben Icons mit unterschiedlichen Farben keine so schlechte Idee sind, wie Sie vielleicht denken.
Ich habe Schwierigkeiten, einen Weg zu finden, die einzelnen Pfade innerhalb des SVG für das Styling anzusprechen. Ich möchte ein SVG als Hintergrundmuster für eine Seite verwenden und den Pfad beim Hovern die Farbe ändern lassen. Ist das möglich?
Der Weg, wie ich es gerne mache
1. SVG: Machen Sie das SVG schwarz #000000 dort, wo Sie die Farbe beim Hovern steuern möchten.
2. CSS: fill: currentColor; im Tag.
3. CSS: Ändern Sie das Farbattribut in CSS, um die Farbe des SVG zu ändern (funktioniert mit Übergängen!).
Tolle Anleitung, aber wie bekomme ich einen Pfad meiner SVG-Icon-Datei auf meinem PC? Sie verwenden in der Anleitung nur die Pfade zum Laden der einzelnen Icons, erwähnen aber nie, wie man die Pfade bekommt.
Dieses PostCSS-Plugin ist ziemlich gut: https://github.com/TrySound/postcss-inline-svg
Es ermöglicht Ihnen, Füll-/Konturenfarben in CSS-Hintergrund-SVGs einfach zu ändern.
Damit die "Masken"-Methode auf dem iPhone (Firefox, Chrome, nicht Safari) funktioniert, musste ich die entsprechenden CSS-Regeln "-webkit-mask: (url)" und "-webkit-mask-size: cover" hinzufügen.