Fontello: Die Vergangenheit und Zukunft des Icon-Font-Services

Avatar of Vitaly Puzrin
Vitaly Puzrin am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Der folgende Beitrag ist ein Gastbeitrag von Vitaly Puzrin, dem Entwickler des Icon-Font-Services Fontello. Ich bin auch ein Fan von IcoMoon, einem ähnlichen Service. Aber ich bin auch ein großer Fan von Wettbewerb, dem Teilen von Gedanken und Open-Source-Software, also danke Vitaly!

Meine Vergangenheit

Ich habe mich früher sehr für ferngesteuerte Modelle interessiert. Ich betreibe sogar die größte russischsprachige Community für ferngesteuerte Modelle. Diese Website unterstützt mich bis heute und gibt mir die Freiheit, an anderen Projekten zu arbeiten. Heute entwickle ich mit einem kleinen Team Software, einfach weil ich gerne programmiere!

Meine Programmiertage begannen, als ich beschloss, die Software für RC Design komplett neu zu schreiben. Viele Jahre lang entwickelten ich (und später ich und mein Team) Komponenten für IPB- und vBulletin-Foren. Schließlich beschlossen wir, dass wir zu viel Zeit damit verbrachten, Drittanbieter-Software nach unseren Bedürfnissen anzupassen. Die beliebtesten Foren sind kommerziell und auf *besten Verkauf* optimiert, nicht auf *beste Qualität*.

Daher ist in unserem Fall die Investition von ein paar Jahren Entwicklungszeit langfristig für unser mittelgroßes Projekt gerechtfertigt1.

Die erste Fontello-Veröffentlichung

Bei der Untersuchung neuer Technologien war ich begeistert von der Idee, Webfonts zur Darstellung von Grafiken zu verwenden. Das ist aus Entwicklungssicht sehr praktisch.

Anfangs war es seltsam. Warum gab es so wenige Icon-Fonts? Warum benutzten nicht alle sie? Meiner Meinung nach liegt das an einem Prozessbruch. Der Prozess von der Idee bis zur Nutzung ist ziemlich lang und komplex

  1. Designer entwirft die Icons
  2. Die Icons werden im Vektorformat erstellt
  3. Mehrere Icons werden zu Fonts verarbeitet
  4. Diese Fonts werden in die für das Web benötigten Formate konvertiert
  5. Spezielles HTML und CSS werden benötigt, um ein System zur Anzeige der Icon-Font-Glyphen zu haben
  6. Optimierungen sind erforderlich, um die Dinge effizient zu gestalten
  7. Frontend-Entwickler müssen es tatsächlich umsetzen

Der Prozess kann in jedem dieser Schritte fehlschlagen. Dies wird besonders wahrscheinlich, da er verschiedene Personen involviert: Designer und Entwickler. Es kann eine Lücke zwischen diesen Personen geben.

Die erste Fontello-Veröffentlichung diente dazu, diese Lücke zu schließen, indem es für alle einfacher wurde. Sie enthielt mehrere bereits fertige Icon-Fonts. Die erste Veröffentlichung finden Sie noch im GitHub-Archiv.

Warum Icon-Fonts verwenden?

Damit wir alle auf dem gleichen Stand sind, fasse ich die Vor- und Nachteile der Verwendung von Webfonts zur Anzeige von Icons zusammen.

Vorteile

  • Fonts sind Vektoren, daher gibt es keine Pixelbildung oder Unschärfe auf hochauflösenden Bildschirmen, wie es bei Rastergrafiken der Fall wäre, die skaliert werden müssen.
  • Die Browserunterstützung ist so gut, wie Sie sie benötigen.
  • Sobald das System eingerichtet ist, ist die Verwendung sehr bequem.
    • Wohl einfacher als das Spriten von Bildern.
    • Sie können mit CSS gesteuert werden, wie Größe, Farbe, Schatten usw.

Nachteile

  • Die Icons sind einfarbig. Es gibt einige ausgefallene (hacky) Techniken für mehrfarbige Icons, aber moderne Trends und HIGs (Human Interface Guidelines) empfehlen sowieso einfarbige.

Wenn Sie weitere Informationen zu Icon-Fonts und deren Verwendung benötigen, hier sind einige empfohlene Links

Nächste Schritte

Nach unserer ersten Veröffentlichung erhielt Fontello (damals "Fontomas" genannt) sehr gute Kritiken. Mit der Bestätigung, dass das Projekt nützlich war, hatten wir neuen Enthusiasmus, es noch besser zu machen. Ich beschloss auch, Fontello als Sandbox zum Testen neuer Technologien zu verwenden, mit denen ich experimentieren wollte, wie WebSockets, neue Bibliotheken und so weiter.

Ungefähr zur gleichen Zeit erschienen neue professionelle (und Open Source) Icon-Fonts: Entypo & FontAwesome. Wir haben sie sofort in Fontello aufgenommen.

Font-Format-Probleme

Für die beste browserübergreifende Unterstützung werden *vier* Font-Formate für das Web benötigt: woff, ttf, svg & eot. Aber wenn Sie nach Bibliotheken für die Font-Generierung suchen, werden Sie nicht viel Hilfe finden. Insbesondere für ttf.

Soweit ich weiß, schließen alle den Prozess serverseitig mit FontForge ab. Die Formate eot und woff sind nur Container für ttf. Es gibt einige Open-Source-Konvertierungsprojekte, wie zum Beispiel für ttf zu eot, und http://code.google.com/p/ttf2eot/ und ttf zu woff. Diese funktionieren und wir verwenden sie.

Hinweisgebung

Hinting ist eine Technologie, um Buchstaben auch in kleinen Größen besser lesbar zu machen. Da das Thema recht komplex ist, empfehle ich Ihnen, die wunderbare Einführung auf der Website des ttfautohint-Tools zu lesen.

Fontello kann mit ttfautohint Hinting hinzufügen. Früher funktionierte ttfautohint nur mit Text-Fonts, da es den Buchstaben O verwendete, um die Basis-Font-Metriken zu ermitteln. Aber ich habe die Unterstützung für Icon-Fonts gesponsert, so dass es nun auch diese hintet.

Ist Hinting gut für Icon-Fonts? Ehrlich gesagt, das hängt davon ab... Ich empfehle Ihnen, mit Ihrem Projekt zu experimentieren und die Ergebnisse zu vergleichen. Kann Ihr Font ohne Hinting scharf sein? Ja, wenn er pixelgenau ist: nur in einer Größe angezeigt, speziell für diese Größe gezeichnet. Zum Beispiel ist der Entypo-Font bei 20px scharf, und FontAwesome ist bei 14px scharf. Um dies zu sehen, gehen Sie auf die Fontello-Website und ziehen Sie den Größenregler hin und her und sehen Sie, wie sich das Aussehen der Icons verändert.

Oberflächendetails

Ich beschloss, einige Zeit damit zu verbringen, die Benutzeroberfläche von Fontello zu verbessern.

Wenn Sie ein Icon finden, das Ihnen gefällt, ist es sehr praktisch zu sehen, wie dieses Icon mit Text kombiniert wird. Das machen wir im zweiten Tab von Fontello, der gleichzeitig als Ort zum Ändern von Namen dient.

Der einzig korrekte Weg, dies zu tun, ist die buchstäbliche Anzeige des Icons über @font-face. Jede andere Technik (wie Raphael oder) Cuffon passt niemals richtig zu den Font-Metriken. Es gab also ein ernstes Problem.

  • Wir müssen unsere Icon-Sammlungen in Webfonts speichern.
  • Das können wir nicht für benutzerdefinierte Icons. Das Neuerstellen eines Fonts für jedes benutzerdefinierte Icon auf der Serverseite ist kompliziert und teuer.

Da das große Ziel darin bestand, die Benutzeroberfläche zu verbessern und es richtig zu machen, beschloss ich, die Importfunktion vorübergehend einzustellen und mich auf die Benutzerfreundlichkeit der Oberfläche zu konzentrieren. Seien wir ehrlich: Ein sehr kleiner Prozentsatz der Leute benötigt wirklich benutzerdefinierte Icons. Vielleicht ist das nicht gut für den "Wow-Faktor", aber Fontello ist kein kommerzielles Projekt, daher kann es einige Geschäftsregeln ignorieren.

Ein weiteres Beispiel für Benutzerfreundlichkeit ist das Design der Fontello-Website. Im Grunde: kein Design :). Nur schlichtes Twitter Bootstrap. Warum? Weil Fontello nur ein Entwicklungswerkzeug ist. Ein Werkzeug wie dieses sollte nicht schön sein, es sollte praktisch sein. Fontello ermöglicht Ihnen:

  • Icons suchen
  • Schnelle Vorschau des Ergebnisses
  • Klassennamen für Ihr spezifisches Projekt ändern

Das ist alles verfügbar und zugänglich.

API für Entwickler

Programmierer hatten einige spezifische Anfragen und Ideen für Fontello.

  • Sie bewahren den Code für ihre Projekte in Versionskontrollsystemen auf. Sie möchten ihre Webfonts auch dort speichern.
  • Sie mögen es nicht, Dateien mit der Maus zu ziehen.
  • Sie möchten eine einfache Möglichkeit, Projekte aus Repositories zu laden, zu aktualisieren und das Ergebnis zurück ins Repository zu verschieben.

Vor einigen Monaten haben wir eine API fertiggestellt, um all dies zu ermöglichen.

Tschüss FontForge

FontForge ist als Editor nett, aber nicht praktisch für die automatisierte Font-Verarbeitung. Es hat seltsame Bugs, die spezifische Workarounds erfordern.

Schließlich beschloss ich, die Ressourcen zu investieren, um Font-Konverter von Grund auf mit Node.js zu schreiben. Das war ein sehr kompliziertes Abenteuer. Jeder, der mit dem ttf-Binärformat arbeiten musste, kann Ihnen sagen, dass es von Aliens für Raubtiere entworfen wurde. Aber dieser Albtraum ist jetzt vorbei, und Sie können das Endergebnis genießen:

Außerdem haben wir eine nützliche Bibliothek für direkte SVG-Pfadtransformationen erstellt (Skalieren, Verschieben, absolute <-> relative Koordinaten und Größenoptimierung).

Natürlich ist Fontello kein völlig einzigartiges Projekt. Die Idee, Fonts zu kombinieren/verkleinern, ist trivial. Aber soweit ich weiß, ist es das einzige in diesem Bereich, das sich so tief in die Entwicklung eingearbeitet hat und alle Errungenschaften unter einer Open-Source-Lizenz teilt.

Hier sind einige interessante Fakten, die nirgendwo sonst dokumentiert sind:

  • Wenn ein ttf-Font kein "PostScript"-Feld in der Namens-Tabelle hat, kann er nicht in der Fontbook von Mac exportiert werden.
  • Im eot-Format muss die font-family mit dem vollständigen Namen beginnen, sonst rendert IE ihn nicht.

Dank der Open-Source-Entwicklung hat jemand diese Informationen in unserem GitHub Issue Tracker gepostet.

Zurück mit benutzerdefinierten Icons

Da unsere Font-Konverter in Node.js geschrieben wurden, war es keine große Sache, den Code im Browser zum Laufen zu bringen. Jetzt erstellt Fontello dynamisch ttf-Fonts für importierte Bilder auf der Client-Seite und injiziert sie über Data-URIs in die Seite.

In der Vorschau sehen Sie die Icons genau so, wie sie in den generierten Fonts sein werden. Theoretisch sollten wir das woff-Format verwenden. Aber da alle modernen Browser mit ttf gut zurechtkommen und wir uns nicht sehr um die IE6-Unterstützung kümmern, verwenden wir ttf, um Zeit zu sparen, indem wir nicht zuerst nach woff portieren.

Wie kann ich eine neue Funktion anfordern?

Sie können alles anfordern, was Sie möchten, auf GitHub. Sogar verrückte Sachen! Stellen Sie sich einfach zwei Fragen: 1) Wird es für Sie wirklich nützlich sein? 2) Wird es für andere Leute nützlich sein?

Hier ist ein Beispiel. Manchmal fragen Leute, warum Fontello keine Benutzerkonten anbietet, um Projekte auf unserem Server zu speichern. Hier sind unsere Gedanken:

  • Die Speicherung von Benutzerdaten ist eine große Verantwortung. Um die Qualität des Dienstes hoch zu halten, erfordert dies Investitionen und das bedeutet, Fontello wie ein Unternehmen zu führen. Da Fontello als nicht-kommerzielles Projekt positioniert ist, möchten wir es nicht dazu drängen, ein Unternehmen zu werden.
  • Benutzer brauchen keine Konten, sie brauchen gute Import- und Exportfunktionen. Dies kann auf bessere Weise erreicht werden.
    • Jedes generierte Font-Paket enthält bereits eine Konfigurationsdatei, die wieder in Fontello geladen werden kann, um die Arbeit fortzusetzen. Ziehen Sie es einfach (oder das ganze Archiv) auf die Fontello-Website. Oder verwenden Sie die API, wie oben beschrieben. Einfach!
    • Verwenden Sie GitHub, um Ihre Projekte zu speichern und Änderungen zu kontrollieren. Das ist viel sicherer und schützt Sie vor Fehlern.

Jede neue Funktionsanfrage wird nach Mehrwert beurteilt. Konten können gut für die Schaffung eines Geschäfts sein, aber sie fügen Fontello-Nutzern keinen spürbaren Mehrwert hinzu. Das ist eine mysteriöse Idee, wie E-Mail/Passwort-Felder zweimal auf dem Registrierungsformular einzufügen – jeder tut es, aber niemand kann erklären, warum.

Die Zukunft

Sie können die vollständige Versionshistorie hier einsehen.

Der nächste große Schritt ist die Verbesserung der Suche: Ermöglichen Sie den Nutzern, Such-Tags zu aktualisieren, verwandte Icons anzuzeigen und so weiter. Einige Informationen können aus Benutzeraktionen extrahiert werden, z. B. durch Analyse von geänderten Klassennamen.

Außerdem wäre es gut, Designer und Programmierer besser zu verbinden. Ich habe das Gefühl, dass dieser Bereich noch nicht so gut abgedeckt ist, wie er sein könnte. Die Erstellung eines vollständigen Icon-Fonts ist eine sehr große Aufgabe. Viele Designer haben nur ein paar Icons, die sie teilen möchten, aber... wo? Es wäre interessant, jedem zu erlauben, seine Icons auf Fontello zu veröffentlichen. Dies erfordert eine ernsthafte Überarbeitung der Benutzeroberfläche. Wenn Sie also ein Interface-Guru sind und teilnehmen möchten, nehmen Sie bitte Kontakt auf!


1 Meine Vision, wie große moderne Foren gebaut werden sollten, kann in dieser Demo eingesehen werden. Es ist HTML5, Ajax-powered, nutzt die History-API und viele andere coole Technologien.