Der folgende Beitrag wurde von Tim Pietrusky verfasst. Tim weiß, dass diese Seite schon lange ein Verfechter der Verwendung von Schriftarten für Icons ist, und hatte eigene interessante Anwendungsfälle zu teilen. Um sich bei der Erstellung der Demos das Leben leichter zu machen, hat er einen kostenlosen Dienst für das Hosting von Icon-Schriftarten erstellt. Das ist auch ein schönes Geschenk an die Community. Ich überlasse es ihm, Ihnen davon zu erzählen…
Icon Fonts sind großartig
- Sie können sie mit CSS ordentlich aufpeppen und sie stört das nicht
- Sie sehen auf jedem Display und jeder Auflösung gut aus
- Es gibt nur eine einzige HTTP-Anfrage für eine beliebige Anzahl von Icons
Schauen wir uns 5 typische Anwendungsfälle für Icon Fonts an.
Bevor wir anfangen
Wir werden keine Vendor-Präfixe verwenden, um den Beispielcode sauber und lesbar zu halten. Wir werden Dinge wie Animationen, Übergänge und Transformationen verwenden, die alle Vendor-Präfixe benötigen, um die beste Browserunterstützung zu gewährleisten. Wie Sie mit Vendor-Präfixen umgehen möchten, liegt bei Ihnen.
Wie Sie in den Beispielen sehen werden, verwende ich den Icon-Font-Hosting-Dienst weloveiconfonts.com. Dies ist mein eigenes Projekt. Hier ist die Geschichte: Ich wollte einen Artikel über Icon Fonts schreiben und suchte nach einem kostenlosen Icon-Font-Hosting-Dienst, fand aber keinen. Also erstellte ich diesen Dienst, um diesen Artikel schreiben zu können.
1. CSS-Loader
Es gibt ziemlich viele fantastische, reine CSS-Loader und Sie können sogar Ihre eigenen unter cssload.net erstellen. Eine weitere Möglichkeit, dies zu tun, sind Icon Fonts. Sie können ein Zeichen verwenden, das wie ein Ladezeichen aussieht, und es mit CSS animieren.
Das ist das grundlegende HTML. Die ersten drei Loader sind Kinder von div.wrapper und einzelne Elemente. Das vierte (div.complex) ist eine Kombination aus zwei Icons.
<div class="wrapper">
<span class="fontelico-spin1"></span>
<span class="fontelico-spin3"></span>
<span class="fontelico-spin5"></span>
</div>
<div class="complex">
<span class="fontelico-emo-devil"></span>
<span class="fontelico-spin4"></span>
</div>
Importieren Sie die Icon-Schriftart Fontelico in Ihr CSS
@import url(http://weloveiconfonts.com/api/?family=fontelico);
[class*="fontelico-"]:before {
font-family: 'fontelico', sans-serif;
}
Fügen Sie die Animation namens load zu den Elementen hinzu, die sie herumdreht (von 0deg bis 360deg), ein wenig skaliert und die Farbe ändert.
/* Normal (left) */
span {
float: left;
text-align: center;
margin: 0 5em;
animation: load 1.337s infinite ease-out reverse;
}
/* Fast (center) */
.wrapper span:nth-child(2) {
animation: load .5s infinite linear;
}
/* Steps (right) */
.wrapper span:nth-child(3) {
animation: load 1.25s infinite steps(18, end) forwards;
}
@keyframes load {
0% {
transform: rotate(0) scale(1, 1);
color: rgba(0, 0, 0, .5);
}
10% { color: rgba(0, 120, 0, .5); }
20% { color: rgba(0, 120, 120, .5); }
30% { color: rgba(120, 120, 0, .5); }
40% { color: rgba(0, 0, 120, .5); }
50% {
transform: rotate(180deg) scale(1.85, 1.85);
color: rgba(120, 0, 0, .5);
}
100% {
transform: rotate(360deg) scale(1, 1);
color: rgba(0, 0, 0, .5);
}
}
Der letzte Loader (div.complex) kombiniert zwei Icons und stapelt sie übereinander. Das erste Kind ist das Teufel-Element (mit der Animation namens rotate) und das zweite Kind ist das Spin-Icon (mit der Animation namens scale).
.complex span:nth-child(1),
.complex span:nth-child(2) {
position: absolute;
margin: 0;
width: 1em;
height: 1em;
}
/* Devil icon */
.complex span:nth-child(1) {
animation: load 1.25s infinite steps(18, end) forwards;
}
/* Spin icon */
.complex span:nth-child(2) {
font-size: 3em;
left: -.35em;
top: -.35em;
color: rgba(0, 0, 0, .3);
animation: devil 3s infinite linear reverse forwards;
}
@keyframes devil {
0% {
transform: scale(-1.85, 1.85);
}
50% {
transform: scale(1.85, -1.85);
}
100% {
transform: scale(-1.85, 1.85);
}
}
Demo auf CodePen
2. SocialCount trifft auf Stil
Menschen nutzen gerne Social-Sharing-Buttons auf ihren Websites, um Besuchern das Teilen zu erleichtern. Aber wenn Sie Facebook, Twitter und Google+ kombinieren, haben Sie eine leere Cache-Größe von 309 KB. Hier kommt das SocialCount jQuery Plugin ins Spiel. SocialCount ist progressiv verbessert, lazy geladen und mobilfreundlich.
Das Standard-Styling ist einfach und der iframe, der die Buttons enthält, ist winzig. Peppen wir diese Buttons mit etwas schickem CSS auf.
Das ist das HTML, das mit dem SocialCount Markup Generator erstellt wurde. Nur eine ungeordnete Liste mit Links und Icons.
<ul
class="socialcount"
data-url="http://www.google.com/"
data-counts="true"
data-share-text="Google is a search engine">
<li class="facebook">
<a href="https://#/sharer/sharer.php?u=http://www.google.com/" title="Share on Facebook">
<span class="count entypo-thumbs-up"></span>
</a>
</li>
<li class="twitter">
<a href="https://twitter.com/intent/tweet?text=http://www.google.com/" title="Share on Twitter">
<span class="count entypo-twitter"></span>
</a>
</li>
<li class="googleplus">
<a href="https://plus.google.com/share?url=http://www.google.com/" title="Share on Google Plus">
<span class="count entypo-gplus"></span>
</a>
</li>
</ul>
Importieren Sie die Icon-Schriftart Entypo in Ihr CSS
@import url(http://weloveiconfonts.com/api/?family=entypo);
[class*="entypo-"]:before {
font: 2.5em/1.9em 'entypo', sans-serif;
}
Wir überschreiben das Standard-Styling von SocialCount durch
- Hinzufügen einer Übergangszeit
- Skalieren des iframes
- Festlegen eines benutzerdefinierten Hintergrunds für die Buttons
.socialcount {
> li {
width: 33%;
border-radius: 0;
transition: all .3s ease-in-out;
cursor: pointer;
&:hover [class*="entypo-"]:before {
opacity: 0;
}
}
iframe {
transform: scale(1.65, 1.65);
}
.button {
top: 50%;
margin: -.75em 0 0 0;
height: 2em;
}
.facebook {
background: rgba(59, 89, 152, .7);
}
&.like .facebook iframe {
width: 8em;
}
.twitter {
background: rgba(0, 172, 237, .7);
}
.googleplus {
background: rgba(172, 0, 0, .7);
}
}
Demo auf CodePen
3. Erweiterte Listen
Die folgenden drei Beispiele basieren alle auf diesem einfachen HTML.
<div>
<h2>Title</h2>
<ul class="style">
<li data-text="">Text</li>
<li data-text="">Text</li>
<li data-text="">Text</li>
</ul>
</div>
Importieren Sie die Icon-Schriftart Font Awesome in Ihr CSS
@import url(http://weloveiconfonts.com/api/?family=fontawesome);
[class*="fontawesome-"]:before {
font-family: 'FontAwesome', sans-serif;
}
Fügen Sie das Standard-Styling für Listen, Listenelemente, Pseudo-Elemente und den Button hinzu. Anstatt eine Klasse zu verwenden, um das Icon auf den Listenelementen zu setzen, ändern wir die content-Eigenschaft des Elements und erstellen so ein Pseudo-Element.
ul {
list-style: none;
padding: 0;
li {
position: relative;
min-height: 2em;
padding: .3em .3em .3em 1.5em;
transition:
background .3s ease-in-out,
color .3s ease-in-out,
box-shadow .1s ease-in-out,
height .25s ease-in-out
;
button {
position: absolute;
left: 1.45em;
bottom: .35em;
opacity: 0;
height: 0;
border: none;
font-size: .8em;
cursor: pointer;
transition: all .4s ease-in-out;
}
&:before {
position: absolute;
top: .425em;
font-family: 'FontAwesome', sans-serif;
margin: 0 .35em 0 -1.35em;
vertical-align: bottom;
}
&:hover {
button {
opacity: 1;
height: 2em;
}
&:before {
color: rgba(255, 255, 255, 1);
right: 0;
transform: scale(2.5, 2.5) translate(-.25em, .15em);
}
&:after {
position: absolute;
content: attr(data-text);
}
}
}
}
3.1 Stuff You Love
Das erste Beispiel ist sehr einfach. Ein Herz anstelle des Standard-Listenstils und ein besonderer Hover-Effekt: Das Icon wird nach rechts verschoben und das ::after-Pseudo-Element erhält den Text des Datenattributs data-text.
.love {
li {
&:before {
/* fontawesome-heart */
content: "\f004";
}
&:before,
&:after {
color: rgba(220, 20, 20, .6);
}
&:hover {
background: rgba(220, 20, 20, .6);
&:after {
width: 2em;
right: .445em;
}
}
}
}
3.2 Downloads
Dies ist eine benutzerdefinierte Downloadliste mit erweitertem Markup: Ein Link und ein Button für jedes Listenelement. Der Button ist standardmäßig ausgeblendet und wird beim Hovern angezeigt.
.downloads {
li {
border-bottom: .15em solid rgba(0, 0, 0, .3);
&:before {
/* fontawesome-download-alt */
content: "\f019";
color: rgba(50, 50, 50, .5);
}
&:hover {
background: rgba(0, 140, 0, .7);
height: 4em;
&:after {
right: .35em;
}
&:before {
color: rgba(255, 255, 255, .2);
}
}
}
}
3.3 Ihr Konto
Ein UI-Konzept für ein Benutzermenü. Wenn Sie mit der Maus über ein Listenelement fahren, wird das Icon nach rechts verschoben und der Box-Shadow füllt den gesamten Hintergrund. Jedes Listenelement hat sein eigenes Icon, basierend auf dem :nth-child-Selektor und der content-Eigenschaft.
.account {
padding: .75em;
border: .15em solid rgba(0, 0, 0, .2);
background-color: rgba(0, 0, 0, .7);
background-image: radial-gradient(center, ellipse cover, rgba(104,104,104,0.6) 0%,rgba(23,23,23,0.7) 100%);
box-shadow: inset 0 0 .35em 0 rgba(0, 0, 0, .2);
color: rgba(255, 255, 255, .6);
backface-visibility: hidden;
li {
cursor: pointer;
&:nth-child(1):before {
/* fontawesome-heart-empty */
content: "\f08a";
}
&:nth-child(2):before {
/* fontawesome-glass */
content: "\f000";
}
&:nth-child(3) {
margin-bottom: 1em;
&:before {
/* fontawesome-comment */
content: "\f075";
}
}
&:nth-child(4) {
margin-bottom: .5em;
&:before {
/* fontawesome-cog */
content: "\f013";
}
}
&:nth-child(5):before {
/* fontawesome-signout */
content: "\f08b";
}
&:hover {
color: rgba(255, 255, 255, 1);
padding-left: 1.5em;
box-shadow: inset 0 0 0 10em rgba(255, 255, 255, .5);
&:before {
color: rgba(255, 255, 255, 1);
transform: none;
}
}
}
}
Demo aller drei Listentypen auf CodePen
4. Emocons.js jQuery Plugin
Emojons.js ist ein jQuery-Plugin, das den Inhalt eines Elements nach bestimmten Zeichenfolgen durchsucht. Alle Treffer werden durch ein Span und die HTML-Klasse des entsprechenden Icons ersetzt. Zum Beispiel eine Chat-App
<div class="chat">
:D :) ;) :'( :o :/ :( B) :P :|
:beer: :devil: :shoot: :coffee: :thumbsup: :angry: :ueber-happy:
</div>
Rufen Sie dann die Emocons.js-Plugin-Methode für Ihr Element auf
$('.chat').emocons();
Alle Elemente innerhalb des Chats werden nun in so etwas wie das hier verwandelt
<span class="fontelico-emo-grin go" title=":D"></span>
Importieren Sie die Icon-Schriftart Fontelico in Ihr CSS
@import url(http://weloveiconfonts.com/api/?family=fontelico);
[class*="fontelico-"]:before {
font-family: 'fontelico', sans-serif;
}
Wenn Emocons.js einen String in ein Emoticon umwandelt, fügt es der Span-Elementklasse go (die eine Animation aufruft) hinzu.
.go {
animation: hey .55s 1 linear;
}
@keyframes hey {
0% {
transform: scale(1, 1);
}
50% {
transform: scale(1.85, -1.85);
}
100% {
transform: scale(1, 1);
}
}
Einige der Emoticons erhalten einen besonderen Stil (z. B. eine Farbänderung) oder etwas wird über ein ::after-Pseudo-Element hinzugefügt.
.fontelico-emo-devil {
color:rgba(180, 0, 0, .9);
}
.fontelico-emo-beer:after {
box-shadow:
-.475em .75em 0 .275em rgba(220, 220, 0, 1),
-.185em .675em 0 .175em rgba(220, 220, 0, 1)
;
}
.fontelico-emo-coffee:after {
box-shadow:
-.475em .78em 0 .235em rgba(222, 184, 135, 1),
-.215em .715em 0 .155em rgba(222, 184, 135, 1)
;
}
.fontelico-emo-shoot:after {
border-radius: .15em;
box-shadow: .315em .525em 0 .1em rgba(0, 0, 0, 1);
}
.fontelico-emo-angry:after {
border-radius: .15em;
box-shadow: -.695em .455em 0 .085em rgba(0, 220, 0, .6);
z-index: 2;
}
Demo auf CodePen
5. Parallax Movie #1337
Das letzte Beispiel ist nur zum Spaß. Es ist nur ein Experiment, um einen endlosen Parallax-Film mit einer einzigen Icon-Schriftart zu erstellen. Das HTML besteht aus vielen Elementen, um die Szene zu erstellen
- Die Kulisse: Himmel, Boden, Nacht und Sonne
- Festes Element: Fahrrad
- Animierte Elemente: Bäume, Giraffe, Einkaufswagen, Gebäude und Heliport
<div class="night"></div>
<div class="wrapper">
<div class="sun">
<div class="maki-fast-food"></div>
</div>
<div class="sky"></div>
<span class="maki-bicycle"></span>
<span class="maki-tree-1" data-child="1"></span>
<span class="maki-tree-1" data-child="2"></span>
<span class="maki-tree-1" data-child="3"></span>
<span class="maki-giraffe"></span>
<span class="maki-grocery-store"></span>
<span class="maki-commerical-building" data-child="1"></span>
<span class="maki-commerical-building" data-child="2"></span>
<span class="maki-heliport"></span>
<div class="ground"></div>
</div>
Importieren Sie die Icon-Schriftart Maki in Ihr CSS
@import url(http://weloveiconfonts.com/api/?family=maki);
[class*="maki-"] {
position: absolute;
margin: 0;
color: #fff;
font-size: 2em;
}
[class*="maki-"]:before{
font-family: 'maki', sans-serif;
}
*:after {
position: absolute;
top: 0;
right: 0;
content: '';
z-index: -1;
width: 0;
height: 0;
}
Der Wrapper rotiert die gesamte Szene um -3deg.
.wrapper {
height: 140%;
width: 120%;
transform: rotate(-3deg) translate(-10%, -15%);
}
Wenn die Sonne untergeht, geht die Nacht auf.
.night {
position: absolute;
z-index: 5;
width: 100%;
height: 100%;
animation: night 45s infinite forwards;
}
@keyframes night {
0%, 30%, 100% {background:rgba(0, 0, 0, 0);}
55% {background: rgba(0, 0, 0, .6);}
}
Himmel und Boden verwenden beide die gleiche background-position-Animation, aber mit unterschiedlichen Geschwindigkeiten.
.sky {
position: relative;
z-index: 0;
background: url(http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/bedge_grunge.png);
height: 50%;
width: 100%;
animation: rollin-bg 25s linear infinite forwards;
}
.ground {
position: absolute;
z-index: 1;
background: url(http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/blackorchid.png);
height: 50%;
width: 100%;
animation: rollin-bg 7s linear infinite forwards;
}
@keyframes rollin-bg {
0% { background-position: 100%; }
100% { background-position: 0; }
}
Ein Element entlang eines Kreises bewegen ist ein fantastischer Artikel von Lea Verou, der hier verwendet wird, um die Burger-Sonne zu animieren.
.sun {
position: absolute;
z-index: 1;
left: 50%;
top: 10%;
width: 2em;
height: 2em;
font-size: 4em;
line-height: 1;
animation: circle 45s linear infinite;
transform-origin: 50% 3.85em;
}
.sun [class*="maki-"] {
color: rgba(240, 180, 0, .2);
text-shadow: 0 0 .35em rgba(240, 240, 0, .7);
}
.sun > div {
animation: inner-circle 45s linear infinite;
}
@keyframes circle {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes inner-circle {
from { transform: rotate(0deg); }
to { transform: rotate(-360deg); }
}
Dies ist das einzige Element, das keine Animation hat. Aber es sollte so aussehen, als würde es sich bewegen.
.maki-bicycle {
left: 50%;
z-index: 4;
margin: -.85em 0 0 -.5em;
color: rgba(30, 30, 140, .95);
}
Und hier sind die animierten Elemente, die alle die gleiche rollende Animation mit unterschiedlicher Geschwindigkeit verwenden.
.maki-tree-1[data-child="1"] {
margin: -1em 0 0 5%;
z-index: 5;
animation: rollin 5s linear infinite;
font-size: 2.4em;
color: rgba(0, 110, 0, .8);
}
.maki-tree-1[data-child="2"] {
margin: -1em 0 0 85%;
z-index: 2;
animation: rollin 12s linear infinite;
font-size: 1.6em;
color: rgba(0, 110, 0, .5);
}
.maki-tree-1[data-child="3"] {
margin: -1em 0 0 25%;
z-index: 2;
animation: rollin 17s linear infinite;
font-size: 1.2em;
color: rgba(0, 110, 0, .3);
}
.maki-giraffe {
margin: .25em 0 0 5%;
z-index: 6;
animation: rollin 12s linear infinite reverse;
font-size: 10em;
color: rgba(255, 255, 10, .9);
}
.maki-giraffe:after {
right: -3em;
content: '\e82a \e82a \e82a \e82a \e82a';
font: .2em 'Maki', sans-serif;
letter-spacing: .2em;
width: 3em;
color: rgba(0, 0, 0, .6);
box-shadow:
0 .45em 0 .75em rgba(255, 255, 255, .4),
1em .35em 0 .75em rgba(255, 255, 255, .4),
2.25em .25em 0 1.05em rgba(255, 255, 255, .4)
;
border-radius: 50%;
transform: translate(2.3em, .55em) rotateY(-180deg);
}
.maki-grocery-store {
margin: -.35em 0 0 5%;
z-index: 5;
animation: rollin 22s linear infinite;
font-size: 4em;
color: rgba(220, 0, 10, .7);
}
.maki-commerical-building[data-child="1"] {
margin: -1em 0 0 5%;
z-index: 3;
animation: rollin 6s linear infinite;
font-size: 7em;
color: rgba(120, 0, 120, .8);
}
.maki-commerical-building[data-child="2"] {
margin: -1em 0 0 5%;
z-index: 2;
animation: rollin 14s linear infinite;
font-size: 4em;
color: rgba(0, 120, 120, .4);
}
.maki-heliport {
margin: -3.5em 0 0 2em;
z-index: 1;
color: rgba(30, 30, 30, .45);
font-size: 1.25em;
animation: rollin 26s linear infinite reverse 2s;
}
@keyframes rollin {
0% {margin-left:105%}
100% {margin-left:-15%;}
}
Demo auf CodePen
Weitere Lektüre
Danke für Ihre Zeit! Und natürlich ist das nicht alles, was Sie mit Icon Fonts machen können. Haben Sie keine Angst, selbst zu experimentieren.
- HTML für die Verwendung von Icon Fonts / Pictos zu Icon Fonts
- Markup-freie Icon Fonts mit Unicode-Range
- Animicons: Sprite-Animationen mit Icon Fonts
- Mehrfarbige Font-Face-Icons
- IcoMoon / Fontello
- Font Squirrel @font-face Generator
- Die große Liste von Flat Icons & Icon Fonts
Wow. Der Film ist großartig! Aber ich kann keinen wirklichen Anwendungsfall dafür erkennen…
Wie im Artikel steht „Das letzte Beispiel ist nur zum Spaß“ :D Ich kann mir nur eine Art Kunstfestival vorstellen und diesen Film als Projektion an der Wand :D
Großartig Tim!
Mir gefallen auch die Möglichkeiten von
unicode–rangein Kombination mit Icon Fonts im PUA. (Private Use Area)Ich glaube, diese Methode wird ein großer Vorteil für zukünftige Verwendungen von Inline-Icons sein, ohne dass Autoren auf generierten Inhalt oder zusätzliche umgebende Markups angewiesen sind.
Cheers Homie!
Wie gehen Sie mit IE9+, Windows und ClearType-Rendering um? Das Font-Rendering ist in IE9+ sehr unterschiedlich und all meine Icon Fonts sehen in ClearType-Browsern falsch ausgerichtet aus. Hat noch jemand dieses Problem?
Es gibt ein paar Tricks, die Sie anwenden können…
-webkit-font-smoothing: antialiasedoder ein leichtertext-shadowauf Ihren Icons (z. B..the-icon { text-shadow: 0 1px 1px rgba(255,255,25,0.50)}). Diese Vorschläge sind meiner Meinung nach Hacks, um einen schlecht gemachten Icon (siehe Ben Dunkle @EmpireOfLight alias WordPress' Icon Maker) zu kompensieren.Es könnte auch eine Situation geben, in der das gerenderte Icon tatsächlich ein schrecklich gemachtes Icon ist, das nie dafür entworfen wurde, richtig auf einem Pixelgitter gerendert zu werden.
@Dennis Gaebel, ich habe all deine Tricks ausprobiert, es wird immer noch schrecklich auf Windows (wenn sie klein sind) gerendert.
@Eliazer
Nun…
-webkit-font-smoothingwird definitiv nicht unter IE funktionieren,text-shadowfunktioniert nur für IE10+, aber höchstwahrscheinlich liegt das Problem mit dem Icon, das bei kleinen Größen nicht richtig angezeigt wird, daran, dass es nie auf einem Pixelgitter für die gewünschte kleine Größe entworfen wurde.Großartige Anwendungsfälle für Icon Fonts! Der Film ist besonders schön! Icon Fonts sind ein Gewinn, deshalb habe ich (schamlose Eigenwerbung) zusammengestellt.
Der umfassendste Index kostenloser ikonischer Webfonts
Icon Fonts FTW! :)
Gute Arbeit! Ich habe eine ähnliche Technik verwendet, um einen Pixel-freien Mediaplayer zu erstellen. Um die Dinge etwas flinker zu machen, habe ich die Fonts Base64-kodiert.
Sie können hier darüber lesen: http://blog.appsfuel.com/2012/11/06/icon-fonts-and-how-to-create-a-pixelfree-audio-player/
Ich persönlich mag es nicht, Fonts für diesen Zweck zu missbrauchen. Ich benutze Firefox mit der Einstellung, meine eigenen Fonts immer zu erzwingen, da es zu viele Bozo auf dem Netz gibt, die versuchen, mir ihre unleserlich hässlichen Font-Auswahlen aufzuzwingen. Dies führt jedoch dazu, dass Icon Fonts als Menü erscheinen, wo ich „k HOME 9 Foren Q Snippets p Galerien…“ sehe, was einfach verwirrend und hässlich ist (besonders, da sie nicht als Hotkeys für Aktionen dienen).
Wenn Sie skalierbare Bilder wünschen, verwenden Sie um Himmels willen SVG. Sie sind auflösungsunabhängig wie Icon Fonts, ermöglichen mehrere Farben und degradieren sich angenehmer. Das einzige Problem, das ich gefunden habe, betrifft die Unterstützung von Spriting mit SVGs, wobei ein einziger Download alle Icons erhält, dann aber zugeschnitten wird.
BAH HUMBUG RABBLE RABBLE.
Ernsthaft. Sie sind ein bisschen wie die „Tech-Gurus“, die JavaScript deaktivieren, nur weil in den 90ern jemand etwas gemacht hat, das ihnen nicht gefallen hat.
Icon Fonts sind aus einer Reihe von Gründen besser als bildbasierte Icons, z. B. die Downloadgeschwindigkeit der Seite.
Nehmen wir an, ich habe 20 Icons, das sind potenziell 20 HTTP-Anfragen für 20 KB-Dateien. Wenn ich diese zu einem Sprite kombiniere, sind es vielleicht 300 KB.
Ein Font ist nur potenziell 30 KB für dasselbe Set – Ihre Ladezeit beträgt also theoretisch 10 % dessen, was sie betragen würde.
Andy,
Ja, ich bin ein bisschen ein Old-School-Tech-Nerd und neige dazu, JS deaktiviert zu lassen, aus einer Vielzahl von Gründen, obwohl ich es selektiv über NoScript/NotScript/ScriptNo für Websites aktiviere, die es nicht missbrauchen (ich kann meine Whitelist-Sites an einer Hand abzählen) oder indem ich mit einer frischen Browser-Sitzung besuche. Die meisten Drive-by-Web-Exploits werden durch die Verwendung eines Skriptblockers gemindert, wie wiederholt in Sicherheitsbulletins erwähnt. Es macht auch meine Web-Erfahrung viel weniger ärgerlich, da ich das Web zu meinen Bedingungen nutzen kann. Die zusätzliche Akkulaufzeit aufgrund der geringeren CPU-Auslastung ist nur ein Nebeneffekt. Das gesagt…
Sie sagen, dass „Icon Fonts besser sind als bildbasierte Icons“, aber Sie spezifizieren nicht, ob Sie Rasterbilder (gif/jpg/png) oder Vektorgrafiken meinen. Ich gebe Ihnen die Vorteile von Icon Fonts gegenüber Rasterbild-basierten Icons, da Sie die Kosten von 20 HTTP-Anfragen oder 300 KB-Download von Bildern erwähnen.
Mein Hauptpunkt war jedoch bezüglich Vektorgrafiken (SVG) vs. Icon Fonts, wo SVG bietet
– semantische Vorteile, da es wirklich nur ein Bild ist, keine Einfügung von Pseudo-Inhalt, der von der richtigen Anzeige in der richtigen Schriftart abhängt
– mehrere Farben
– weniger visuelle Brüche, wenn Ihr Schrift- oder Bildserver/CDN ausfällt – Sie bleiben nicht mit zufälligen Buchstaben auf dem Bildschirm zurück; es tut einfach das, was Browser tun, wenn ein Bild nicht verfügbar ist (entweder aus dem Fluss entfernen oder ein Platzhalter-Bild-Icon anzeigen)
– vergleichbare Größe (ein komprimiertes .SVG ist auf Augenhöhe mit einem Icon Font für vergleichbaren Inhalt)
Die einzigen Nachteile von SVG ergeben sich aus der Unterstützung (insbesondere ältere IE), insbesondere in Bezug auf das Clipping, wenn sie als Sprites verwendet werden.
Shalom.
Javascript-Deaktivierung? Was ist das, 1999? Ich denke, Ihr Misstrauen ist unbegründet, aber das ist nur meine Meinung. Wenn wir alle diese Denkweise verfolgen würden, würden wir immer noch Layouts mit Tabellen machen.
Es gibt viele verschiedene Möglichkeiten, Icon Fonts zu verwenden, einige semantischer als andere. Was die Frage angeht, dass „das CDN“ ausfällt, können Sie Ihre Schriftart paketieren und in Ihre Website einbetten. Wenn Ihre Website läuft, läuft auch Ihre Schriftart. Ihr Argument für SVG ist fair, aber in der realen Welt unterstützen wir IE, daher ist dies für die meisten Projekte keine praktikable Lösung.
Merne,
Sie können mein Misstrauen gerne als unbegründet betrachten, aber eine Überprüfung von Schwachstellenlisten zeigt oft, dass viele Exploits fehlschlagen, wenn JS deaktiviert ist. Und wenn Sie den Sicherheitsbehörden zuhören (ich empfehle den Security Now Podcast), werden die meisten sagen, dass das Ausführen von beliebigem Code auf Ihrem Computer ein Risiko darstellt. Ja, es mag ein geringes Risiko sein. NoScript erlaubt mir jedoch, selektiv zu entscheiden, welche Websites ich erlaube/vertraue, Code auf meinem Computer auszuführen. Außerdem ist meine Browser-Erfahrung VIEL schneller, da ich keine 30 Tabs mit Websites habe, die alle versuchen, ihre verschiedenen Skripte auszuführen.
Ich bin mir nicht sicher, wie Sie von dort zu „immer noch Layouts mit Tabellen machen“ kommen. CSS & JS sind völlig unabhängig.
Was SVG angeht, kann man immer http://code.google.com/p/svgweb/ verwenden, um die Funktionalität in IE bereitzustellen.
@Tim Chase, ich stimme Ihnen zu 100% zu. Ich ziehe es auch vor, Webfonts ganz zu deaktivieren und nur lokal verfügbare Fonts zu verwenden. Immer mehr Websites versuchen, schicke Fonts zu verwenden, die auf dem Bildschirm des Designers vielleicht großartig aussehen, aber auf meinem Monitor oft verschwommen und völlig unleserlich sind.
Außerdem ist es bei all dem Gerede über Semantik (Bashing von Tabellen für Layouts usw.) äußerst hypothetisch, die Verwendung von Icon Fonts für die Anzeige von Icons zu empfehlen.
Sie haben dies auch in einem anderen Artikel über Icon Fonts angesprochen.
Lesen Sie diesen Artikel. Sehen Sie sich das Video an. Es erklärt die Probleme mit Barrierefreiheit und Fallbacks. Wenn Sie Probleme mit Unschärfe auf Ihrem Computer haben und sie Ihnen nicht gefallen, in Ordnung, aber es ist nichts grundsätzlich Schlechtes daran, sie zu verwenden, wenn Sie es richtig machen.
Chris,
Da jedem Glyph jedes Zeichen zugewiesen werden kann (vorausgesetzt, Sie kontrollieren die Font-Definition), würde ich im Fall Ihrer Website dazu neigen, HTML-Accesskeys in Kombination mit den Icon-Fonts zu verwenden, so dass, wenn die Icon-Font nicht geladen wird, die angezeigten nicht-font-iconifizierten Zeichen einen gewissen Wert haben. Im Fall Ihrer Website, anstatt „k HOME 9 Foren Q Snippets p Galerien…“, was Firefox mir anzeigt, könnten Sie Ihre Accesskeys so zuordnen, dass „H“ zu „Home“ geht und das „H“-Glyph Ihr „Home“-Glyph ist. Gleiches gilt für „F“oren und „S“nippets, und dann Ihre Forum- und Snippet-Glyphen „F“ bzw. „S“ zugeordnet sind. Dann gibt es zumindest einen semantischen Wert für die (ehemals) willkürlichen Buchstaben, die erscheinen, wenn die Schriftart nicht geladen wird – sei es, weil der User-Agent die CSS überschreibt (wie ich es tendenziell tue, wie oben in meinem Root-Kommentar erwähnt), Differenzen zwischen Domainen beim Font-Serving (Firefox blockiert absichtlich Fonts von verschiedenen Domains als Sicherheitsmaßnahme) oder Server-/Netzwerkprobleme stören.
Es gibt sicherlich Orte, an denen Icon Fonts ohne Beeinträchtigung verwendet werden können, aber es ist auch einfach, sie auf eine Weise zu verwenden, die das Erlebnis stört.
-Tim
Mir ist gerade aufgefallen, dass seit meinem ursprünglichen Posting, aus dem ich das „k HOME 9 Foren…“-Zitat habe, das „k“ jetzt als Häkchen erscheint. Meine Bedenken bleiben trotzdem bestehen. :-)
Wow! Sehr coole Integration von Icon Fonts und CSS, und danke für das Icon-Font-Hosting!
Wow! Das ist cool.
Ich werde diese Fonts auf jeden Fall verwenden, aber können Sie etwas über Ihr CDN oder Ihre Uptime erklären, da ich nicht möchte, dass meine Website kaputt geht.
Btw, Windows 9 (666TB) ROFL.
@Chris, wir haben immer noch ein Hauptproblem: Wenn diese Icons sehr klein werden, werden sie auf Windows-Maschinen schrecklich gerendert…
Ich habe sogar Ihre Demo überprüft, versuchen Sie, die Größe auf einem PC zu verringern.
Gibt es nach all dem eine Lösung?
Hallo Chris, du bist immer großartig. :)
Ich wurde dieses Jahr von einem Kollegen auf Icomoon (das Sie im Abschnitt Weitere Lektüre auflisten) aufmerksam gemacht und habe es erst in den letzten 2-3 Monaten nutzen können. Wow – es ist unglaublich genial. Ich liebe, wie einfach es zu bedienen ist, dass man eigene Icons hinzufügen und sogar verschiedene Sätze speichern kann.
Toller Beitrag übrigens!
Es ist erstaunlich und sehr beeindruckend. Danke, dass Sie diese schöne Art der Animation geteilt haben. Machen Sie weiter so :)
Danke dafür, besonders für die Beispiele mit Social Count und erweiterten Listen. Ich kann es kaum erwarten, sie in einem Projekt zu verwenden. Ich sehne mich persönlich nach dem Tag, an dem ich nie wieder ein Bild schneiden muss.
Tolles Tutorial, sehr beeindruckend!
Toller Artikel!! Danke :D
Wow! Das ist ein großartiger Artikel. Ich suche schon seit einiger Zeit nach etwas Ähnlichem wie Fall #3. Danke!
Ausgezeichnete Zusammenfassung, Chris. Danke.
Wirklich schöne Beispiele, die verbesserten Listen sind für mich am interessantesten. Ich habe nur eine Frage zu 3.3 „Ihr Konto“-Fall. Welche Technik wird verwendet, um die Schaltfläche „Datei abrufen“ beim Überfahren mit der Maus anzuzeigen? Im HTML haben Sie diese Datei abrufen. Ich verstehe die Bedeutung nicht. Vielen Dank im Voraus für Ihre Erklärung.
Der „Button“ (diese Datei abrufen) ist standardmäßig ausgeblendet (height: 0; opacity: 0;). Wenn Sie mit der Maus über ein Listenelement fahren, wird der Button angezeigt (height: 2em; opacity: 1;).
Icon-Fonts sind großartig! Aber es gibt eine Sache, die ich nicht ganz verstehe – die vertikale Zentrierung.
Das CSS „vertical-align: middle;“ funktioniert nicht wie erwartet. Es gibt eindeutig zusätzlichen Platz (ca. 2–4 Pixel) über dem Icon und das treibt mich in den Wahnsinn! Wie kann ich ihn entfernen?
Hier ist ein Beispiel, was ich meine
http://jsfiddle.net/yQJ2z/
Jeder Rat wäre sehr willkommen.
Ja. Das ist eine nette Technik, aber das Ergebnis nicht.
Ach, und das funktioniert nicht auf dem Samsung Wave 2 (in Opera Mini und Delphin)
Einige tolle Ideen dort.
Ich verwende jetzt fast ausschließlich Icon-Fonts, anstatt mich mit beschissenen kleinen PNGs herumzuschlagen. Sobald der Font eingerichtet ist, ist es zu einfach, Icons zu ändern und verschiedene Dinge im Handumdrehen auszuprobieren.
Diese kleinen Beispiele haben mir einige Ideen gegeben!
Ich verwende die Font Awesome Piktogramme in einem meiner After Effects Videos für einen Kunden. Ich liebe es, wie die Vektorgrafiken auf meinem Retina MacBook perfekt angezeigt werden. Danke für einen weiteren großartigen Kurs!
Ist „font-awesome“ Icon oder ein gruppiertes Icon-Bild „css-sprite“ besser?
„Myntra.com“ verwendet CSS-SPrite für ICONS, also ist meine Frage, welches vorzuziehen ist.