Der folgende Text ist ein Gastbeitrag von Parker Bennett. Während Icon-Schriftarten effizient, einfach zu bedienen und skalierbar sind und all das, ist einer der klassischen "Nachteile" davon, dass das Icon nur eine Farbe haben kann. Parker hat ein brandneues Projekt, das dieses Problem auf einfache und clevere Weise löst. Ich überlasse es ihm, es Ihnen vorzustellen.
Auch wenn die Zukunft von Icons wahrscheinlich SVG sein wird, bieten Icon-Schriftarten hier in der Gegenwart immer noch eine überzeugende Alternative – mit super einfacher Gestaltung von Farbe, Größe, Textschatten, Hover-Effekten und mehr nur mit CSS. Icon-Schriftarten sind immer noch großartig.
Ein großer Vorteil von SVG gegenüber Icon-Schriftarten ist die volle Farbe. Aber Icon-Schriftarten müssen nicht auf eine einzige Farbe beschränkt sein. Durch Überlappen von zwei oder mehr Elementen können wir einzigartige "mehrfarbige" Icons mit einem modernen Flat-Look erstellen. Wenn Sie jemals zweifarbig oder im Siebdruck gedruckt haben, ist es eine ähnliche Idee.
Ich nenne sie Stackicons.
Für jede Farbe verwenden wir ein separates Pseudo-Element und dann absolute Positionierung, um sie übereinander zu stapeln. (Wenn Sie mehr als zwei Farben wünschen, kostet es Sie einen nicht-semantischen Span.)
/* @font-face to load icon font... */
/* horizontal button row: inline-block vs float makes positioning easier using text-align */
/* any class that starts with "st-icon-" */
[class^="st-icon-"] {
display: inline-block;
vertical-align: top;
white-space: nowrap;
/* child elements absolute */
position: relative;
/* remove inline-block white-space */
margin-right: -.16em; /* 5px */
/* if not already universally applied */
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
/* padding here for text, icons replicate this using size and position:absolute - padding makes touch-target bigger */
padding: 0.143em;
/* units used in font: 1em = 2048, icons 2400 wide, so icons are 1.171875em (2400/2048). Add padding x2 to get size: */
height: 1.45788em;
width: 1.45788em;
font-size: 1.815em;
/* text hidden old-school */
text-align: left;
text-indent: -9999px; }
/* position:absolute stacks pseudo elements - extra <span> in markup = 2 extra pseudo elements */
[class^="st-icon-"]:before,
[class^="st-icon-"]:after,
[class^="st-icon-"] span:before,
[class^="st-icon-"] span:after {
display: block;
position: absolute;
white-space: normal;
/* match padding above */
top: 0.143em;
left: 0.143em;
/* undo text hidden */
text-indent: 0;
/* inherits size from parent, ems cascade */
font-size: 1em;
font-family: "Stackicons-Social";
font-weight: 400 !important;
font-style: normal !important;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-smoothing: antialiased;
/* screenreaders */
speak: none;
/* transitions here */ }
.st-icon-amazon:before {
/* character code - unicode private use area */
content: "\e079"; /* black "a" */
color: black; }
.st-icon-amazon:hover:before {
color: #626262; }
.st-icon-amazon:after {
content: "\e080"; /* orange smile */
color: #ff9900; }
.st-icon-amazon:hover:after {
color: #ffbd59; }
Mit rgba-Werten können wir sogar etwas Farbvermischung betreiben, um mehr Farben zu erhalten. Wenn wir wirklich die Grenzen ausreizen wollen, können wir -webkit-background-clip: text verwenden, um Icons einen -webkit-linear-gradient-Hintergrund zu geben.
Ja, es ist ein bisschen "hacky": Es erfordert etwas Design-Voraussicht und die Fähigkeit, eine Icon-Schriftart zu generieren. Es gibt mehr bewegliche Teile zu verwalten. Aber es bietet auch viel Flexibilität, besonders mit Sass-Variablen.
Stackicons-Social
Um zu zeigen, wie es funktioniert, habe ich eine kostenlose, Open-Source Icon-Schriftart, Stackicons-Social, erstellt und ein Sass "Construction Kit" entwickelt, um den CSS-Code für sowohl einfarbige Icons als auch "mehrfarbige" Versionen von über 60 sozialen Marken zu generieren.
Stackicons-Social
Ich habe auch eine Reihe von Button-Formen in die Schriftart integriert, von quadratisch bis rund (plus nur-Icons) und habe Klassen, die die Form im laufenden Betrieb überschreiben. Runde Icons gewünscht? Fügen Sie einfach die Klasse .st-shape-circle hinzu. iOS-Stil? .st-shape-rounded3.
Probieren Sie es auf CodePen aus
Zusammenführung mit Sass
Hinter den Kulissen gibt es eine Gruppe von .scss _partial-Dateien, die Sass kompiliert. Wenn Sie mit Sass vertraut sind, können Sie Dinge durch Ändern von Variablen in diesem "Construction Kit" umfassend anpassen.
- fonts-stackicons-social – Pfad zur Stackicons-Social-Schriftart.
- colors-social–2014 – Farbvariablen für soziale Marken.
- unicodes-stackicons-social – Unicode-Zeichen der Schriftart, die in Variablen abstrahiert sind.
- construction-kit-stackicons-social – Hier generieren wir Standardwerte für Icon-Größe, Margin, Padding, Form, Farbe, Hover-Stil usw. (Spielen Sie hier.)
- css-defaults-stackicons-social – Dies erledigt die CSS-Arbeit, um jede .st-icon-($brand)-Klasse zu erstellen.*
- override-shapes-stackicons-social – Ermöglicht es Ihnen, die Button-Form bei einfarbigen Icons mit Klassen zu überschreiben: st-shape-square bis st-shape-circle, plus st-shape-icon.*
- override-colors-stackicons-social – Einige Beispiele für "Farbstile" für einfarbige Icons zur Demonstration verschiedener Optionen. Viel zusätzlicher CSS-Code, daher ist er standardmäßig auskommentiert.*
- multi-color-kit-stackicons-social.scss – Ähnlich wie "construction-kit" oben, aber für die Klasse .st-multi-color: generiert Standardform, Farbstil usw.
- multi-color-css-stackicons-social.scss – Ähnlich wie "css-defaults" oben, erledigt dies die CSS-Arbeit, um jede mehrfarbige .st-icon-($brand)-Klasse zu generieren.*
- multi-color-override-shapes-stackicons-social – Dies ermöglicht es Ihnen, Icon-Formen mit Klassen auf mehrfarbigen Icons zu ändern.*
* Da Sass keine Variablen in Variablen erlaubt, werden hier viele @if-Anweisungen verwendet, um die .st-icon-($brand)-Klassen zu generieren. Hässlich, aber mäßig wartbar. Es gibt mehrere @each-Anweisungen, die die auszugebenden Marken auflisten. Idealerweise würden Sie diese Listen durchgehen und bearbeiten, um die CSS-Ausgabe auf die benötigten Marken zu beschränken.
Selbst basteln
Es gibt einige großartige kostenlose Ressourcen zur Erstellung von Icon-Schriftarten, darunter icomoon.io und fontello.com. Ich benutze Adobe Illustrator und Glyphs auf dem Mac. (Glyphs Mini ist eine günstigere Option, die die Einheiten pro Em auf 1000 begrenzt. Sie bieten auch Studentenpreise.) Um die Web-Schriftartversionen zu generieren, empfehle ich FontPrep, das Brian Gonzalez gerade Open Source gemacht hat. FontSquirrel ist eine weitere gute kostenlose Option. (Wenn Sie an weiteren Workflow-Details interessiert sind, lassen Sie es mich in den Kommentaren wissen.)
Sie sollten sich auch some random dude (P.J. Onori) und sein iconic-Projekt ansehen. Er hat auch einige hilfreiche Tipps zur Verwendung von Icon-Schriftarten.
Wie immer, wenn Sie Fragen, Kommentare oder Korrekturen haben, können Sie mir eine E-Mail an parker@parkerbennett.com senden.
Die sehen FANTASTISCH aus. Das hat mir die Augen für neue Möglichkeiten in SVG geöffnet. Danke Parker!
Ich möchte Blogger und Github Stackicons zu meinem Blogger-Blog hinzufügen, gibt es eine einfache Lösung?.
Außerdem finde ich viele benutzerdefinierte Schriftarten, aber sie enthalten kein Blogger-Icon :)
Sieht ziemlich cool aus, ist aber auch irgendwie schwerer als nur ein einfaches Bild-Icon. Was wären Ihrer Meinung nach die Hauptvorteile?
Kleinere Datei, Skalierung mit Qualität, reaktionsschnell, CSS-Übergänge, Animationen, Schatten, Ränder, Farbe...
@WillB.
1) Keine separaten Bilder für hochauflösende und nicht hochauflösende Displays erforderlich
2) Keine zusätzlichen HTTP-Anfragen zum Abrufen von Bildern.
3) Was @Kyrodes gesagt hat
Aus irgendeinem Grund habe ich es noch nicht ausprobiert, also frage ich nur: Können Sie nicht einfach eine mehrfarbige Vektorgrafik aus Illustrator exportieren und diese anstelle eines dieser verwenden?
Das können Sie, aber Sie haben dann nicht mehr so viel Kontrolle über das Styling dieses Icons.
Wenn Sie also bereits wissen, welche Farben Sie verwenden möchten, sind Sie auf der sicheren Seite? Ich bin offen für alles, was eine großartige Idee ist, aber ich vergleiche nur die Zeit, die es dauern würde, die Farbe in Illustrator mit einer Pipette zu ändern und neu zu speichern, im Gegensatz zum Durchsuchen einer Stylesheet, um Pseudo-Selektorfarben zu finden und zu ändern. Aber dann wieder, was ist der Unterschied bei der Ladezeit, da das auch ein Faktor ist?
Ich sollte ein paar Experimente machen... es sei denn, jemand hier hat das schon getan?
Was ist, wenn Sie dasselbe Icon an mehreren Stellen mit mehreren Stilen verwenden möchten? Sie müssen entweder x separate Bilder erstellen, oder ein Icon in Ihrer Schriftart mit x Stilen, die an x Stellen angewendet werden. Ich fände das Letztere persönlich viel einfacher.
SVGs funktionieren einwandfrei, wenn Sie sich keine Sorgen um das Ändern der Farbe oder ähnliches im laufenden Betrieb machen. Ich verwende Icon-Schriftarten, wenn ich möchte, dass ein bestimmtes Icon beim :hover die Farbe ändert. Mit SVGs würde dies bedeuten, zwei separate Dateien auszutauschen oder das SVG mit etwas schickem JavaScript zu manipulieren. Dann eine weitere SVG-Datei für :active. Das ist nicht unmöglich, aber es ist eine erhebliche Menge Arbeit. Mit einer Icon-Schriftart behandeln Sie das Icon einfach als Zeichen. Die Möglichkeit, das Icon in CSS zu manipulieren, hat auch den zusätzlichen Vorteil, dass es super einfach ist, eine Übergangszeit für die Farbeigenschaft hinzuzufügen.
Hallo Cory, das ist ein sehr guter Punkt! Das sind die Dinge, die ich hören möchte.
Es hängt stark davon ab, wie Sie sie verwenden. Wenn Sie Inline-
<svg>verwenden, können Sie die Formen darin ansprechen und Aspekte davon (einschließlich des Hintergrunds) mit CSS absolut ändern. Wenn Sie SVG als Bild oder Hintergrundbild verwenden, können Sie das jedoch nicht.Hallo Chris, was daran reizvoll ist, ist die Kontrolle, die Sie während einer Animation hätten. Formen und Farben in verschiedene andere Formen und Farben zu verwandeln. Ich habe noch keine dieser Techniken ausprobiert, werde es aber tun.
Die Vorteile, die Sie bereits bei der Verwendung von Font-Icons gegenüber Bild-Icons und deren lästigen Sprite-Bildern hätten. Der Autor hat im Beitrag einige Vorteile genannt, wie z. B. skalierbar, effizient, CSS-stilbar & animierbar.
Keine Erwähnung von Browserkompatibilität.
Können wir die gleiche Kompatibilität wie bei regulären Font-Icons erwarten?
Habe ich etwas falsch gemacht oder sind http://stackicons.com/ und http://www.stackicons.com/ im Moment beide nicht erreichbar?
im Sinne von
403 ForbiddenSie haben keine Berechtigung, auf / auf diesem Server zuzugreifen.
Apache/2.2.22 Server auf www.stackicons.com Port 80
Bei mir auch nicht erreichbar.
Sollte jetzt behoben sein. .htaccess-Datei ist durcheinander geraten.
Super cooler Artikel. Ich habe tatsächlich Icon-Schriftarten gestapelt und kombiniert, wenn ich in der Klemme steckte, es ist machbar, aber weit davon entfernt, perfekt zu sein.
Übrigens, wir müssen dieses CodePen-Icon in FontAwesome integrieren. Danke Parker für das süße Icon-Schriftart-Set!
Ich frage mich… Kann man letter-spacing verwenden, um Zeichen zu stapeln? Offensichtlich muss man eine monospaced Schriftart erstellen (ich weiß nicht, ob Stakicons monospaced ist), um richtig auszurichten, aber man braucht nicht alle Positionseigenschaften.
Das ist eine süße Idee, ich feiere sie total. Während einfarbige Font Awesome Icons für mich und meine Projekte normalerweise ausreichen, werde ich das für schlechte Zeiten im Hinterkopf behalten. Gute Arbeit Parker.
Was sind die Browserkompatibilitäts-Fallstricke im von SASS generierten CSS?
Rückblickend auf die 80er Jahre erinnere ich mich an eine ähnliche Technik auf meinem ersten 8-Bit-Computer, dem Amstrad CPC 464: Das Zeichnen mehrerer überlappter Zeichen war der einfachste Weg, um mehrfarbige Sprites in BASIC zu erhalten :)
Ehrlich gesagt, ich würde lieber SVG-Sprites verwenden als das. Ja, es ist eine interessante Technik, aber irgendwie übertrieben.
Öffnen Sie es nicht in Opera Mini!
Das sieht gut aus. Aber wie erstelle ich die für diese Technik benötigte Font-Datei?
Gute Frage. Ich frage mich dasselbe.
Ich erkenne, dass jede Ebene ein anderer Charakter ist, aber gibt es eine Möglichkeit, jeden Charakter schnell zu positionieren, ohne zu raten und zu testen?
Wie William unten erwähnt hat, ist http://glyphter.com/ eine großartige Möglichkeit, die Basis-Icon-Schriftarten zu erstellen.
Danke für den Artikel! Sie können bis zu vier Icons in einem einzigen HTML-Element stapeln, nur mit CSS. Ich habe einen kleinen Blog-Beitrag darüber geschrieben: http://pixelambacht.nl/2014/multicolor-icons/
Dies würde den zusätzlichen
spanin Ihrem HTML eliminieren.Ich mag diesen Ansatz etwas mehr. Schöner Hack mit :first-letter.
Persönlich finde ich einfarbige Schriftarten sauberer, aber das ist ein netter Trick; bookmarkiert. :)
Glyphter.com ist eine weitere gute Ressource zur Erstellung von Icon-Schriftarten.
http://fontawesome.io hat dies bereits getan und Klassen zum Überlagern der Icons integriert.
Meine Freunde und Kollegen Nik Wise und Paul Pederson haben letztes Jahr etwas Ähnliches gemacht, das sich auf die Verwendung von Ligaturen für ein semantisches Fallback konzentrierte. Andere Technik, aber sehr ähnliches Konzept. Sehenswert.
github.com/nikolaswise/three-color-icons
paulcpederson.com/articles/devicons
nikolaswise.github.io/devicons
Ich glaube, SVG hat einige Fähigkeiten, die nicht viele Leute kennen.
Leute, die es wissen, sollten informieren, damit andere mit diesen großartigen Möglichkeiten von SVG vertrauter werden.
Großartig! Ich habe Ihr großartiges Tutorial verwendet, um gestapelte Icons für Kreditkarten zu erstellen
http://williamrandol.github.io/CreditCardIconFont/