Wie man @font-face in CSS verwendet

Avatar of Chris Coyier
Chris Coyier am

Die @font-face Regel ermöglicht das Laden benutzerdefinierter Schriftarten auf einer Webseite. Sobald sie zu einem Stylesheet hinzugefügt wurde, weist die Regel den Browser an, die Schriftart herunterzuladen, von wo sie gehostet wird, und sie dann wie in CSS angegeben anzuzeigen.

Ohne die Regel sind unsere Designs auf die Schriftarten beschränkt, die bereits auf dem Computer eines Benutzers geladen sind und die je nach verwendetem System variieren. Hier ist eine schöne Übersicht über vorhandene Systemschriftarten.


Allgemeine Browserunterstützung

Diese Daten zur Browserunterstützung stammen von Caniuse, wo Sie detailliertere Informationen finden. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.

Desktop

ChromeFirefoxIEEdgeSafari
43.59123.1

Mobil / Tablet

Android ChromeAndroid FirefoxAndroidiOS Safari
12712744.2-4.3

Praktischer Umfang der Browserunterstützung

Die Dinge verändern sich stark in Richtung WOFF und WOFF 2, daher können wir wahrscheinlich damit auskommen

@font-face {
  font-family: 'MyWebFont';
  src:  url('myfont.woff2') format('woff2'),
        url('myfont.woff') format('woff');
}

Heutzutage könnten Sie wahrscheinlich sogar nur WOFF2 verwenden.

@font-face {
  font-family: 'MyWebFont';
  src: url('myfont.woff2') format('woff2');
}

Diese Daten zur Browserunterstützung stammen von Caniuse, wo Sie detailliertere Informationen finden. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.

Desktop

ChromeFirefoxIEEdgeSafari
3639Nein1412

Mobil / Tablet

Android ChromeAndroid FirefoxAndroidiOS Safari
12712712710.0-10.2

Das Einzige, was WOFF Ihnen zusätzlich an praktischem Nutzen bringt, ist die Unterstützung von Internet Explorer 11.

Tiefste mögliche Browserunterstützung

Dies ist die Methode mit der derzeit tiefsten möglichen Unterstützung. Die @font-face Regel sollte vor allen anderen Stilen in das Stylesheet eingefügt werden.

@font-face {
  font-family: 'MyWebFont';
  src: url('webfont.eot'); /* IE9 Compat Modes */
  src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('webfont.woff2') format('woff2'), /* Super Modern Browsers */
       url('webfont.woff') format('woff'), /* Pretty Modern Browsers */
       url('webfont.ttf')  format('truetype'), /* Safari, Android, iOS */
       url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
}

Verwenden Sie sie dann zur Gestaltung von Elementen wie folgt

body {
  font-family: 'MyWebFont', Fallback, sans-serif;
}

Etwas tiefere Browserunterstützung

Wenn Sie eine Art Mittelweg zwischen voller Unterstützung und praktischer Unterstützung benötigen, deckt das Hinzufügen einer .ttf-Datei einige weitere Fälle ab.

@font-face {
  font-family: 'MyWebFont';
  src: url('myfont.woff2') format('woff2'),
       url('myfont.woff') format('woff'),
       url('myfont.ttf') format('truetype');
}
ChromeSafariFirefoxOperaIEAndroidiOS
3.5+3+3.5+10.1+9+2.2+4.3+

Alternative Techniken

@import

Während @font-face hervorragend für Schriftarten geeignet ist, die auf unseren eigenen Servern gehostet werden, kann es Situationen geben, in denen eine gehostete Schriftlösung besser ist. Google Fonts bietet dies als Möglichkeit an, ihre Schriftarten zu nutzen. Das Folgende ist ein Beispiel für die Verwendung von @import, um die Schriftart Open Sans von Google Fonts zu laden.

@import url(//fonts.googleapis.com/css?family=Open+Sans);

Dann können wir sie zur Gestaltung von Elementen verwenden

body {
  font-family: 'Open Sans', sans-serif;
}

Wenn Sie die URL für die Schriftart öffnen, können Sie tatsächlich die gesamte @font-face-Arbeit sehen, die im Hintergrund stattfindet.

Ein Vorteil der Nutzung eines gehosteten Dienstes ist, dass er wahrscheinlich alle Schriftdateivarianten enthält, was eine tiefe Cross-Browser-Kompatibilität gewährleistet, ohne dass wir all diese Dateien selbst hosten müssen.

Ähnlich könnten Sie dasselbe Asset verlinken wie jede andere CSS-Datei, im des HTML-Dokuments anstatt in CSS. Am Beispiel von Google Fonts sieht das so aus:

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">

Dann können wir unsere Elemente wie bei den anderen Methoden gestalten

body {
  font-family: 'Open Sans', sans-serif;
}

Auch hier werden die @font-face-Regeln importiert, aber anstatt sie in unser Stylesheet einzufügen, werden sie stattdessen in unseren HTML- eingefügt.

Es ist im Grunde dasselbe ... beide Techniken laden die benötigten Assets herunter.

Schriftdateitypen verstehen

Der ursprüngliche Ausschnitt am Anfang dieses Beitrags verweist auf viele Dateien mit seltsamen Erweiterungen. Lassen Sie uns jede davon durchgehen und ein besseres Verständnis dafür bekommen, was sie bedeuten.

WOFF / WOFF2

Steht für: Web Open Font Format.

Erstellt für die Verwendung im Web und von Mozilla in Zusammenarbeit mit anderen Organisationen entwickelt. WOFF-Schriftarten laden oft schneller als andere Formate, da sie eine komprimierte Version der Struktur verwenden, die von OpenType (OTF) und TrueType (TTF) Schriftarten verwendet wird. Dieses Format kann auch Metadaten und Lizenzinformationen in der Schriftdatei enthalten. Dieses Format scheint der Gewinner zu sein und dahin bewegen sich alle Browser.

WOFF2 ist die nächste Generation von WOFF und bietet eine bessere Komprimierung als das Original.

SVG / SVGZ

Steht für: Scalable Vector Graphics (Font).

SVG ist eine Vektor-Neuerstellung der Schriftart, was sie im Dateiumfang viel leichter macht und sie auch ideal für die mobile Nutzung. Dieses Format ist das einzige, das von Safari für iOS Version 4.1 und niedriger erlaubt ist. SVG-Schriftarten werden derzeit von Firefox, IE oder IE Mobile nicht unterstützt. Firefox hat die Implementierung verschoben auf unbestimmte Zeit, um sich auf WOFF zu konzentrieren.

SVGZ ist die komprimierte Version von SVG.

EOT

Steht für: Embedded Open Type.

Dieses Format wurde von Microsoft (den ursprünglichen Innovatoren von @font-face) entwickelt und ist ein proprietärer Dateistandard, der nur von IE unterstützt wird. Tatsächlich ist es das einzige Format, das IE8 und niedriger erkennt, wenn @font-face verwendet wird.

OTF / TTF

Steht für: OpenType Font und TrueType Font.

Das WOFF-Format wurde ursprünglich als Reaktion auf OTF und TTF entwickelt, teilweise weil diese Formate leicht (und illegal) kopiert werden konnten. Allerdings hat OpenType Fähigkeiten, an denen viele Designer interessiert sein könnten (Ligaturen und dergleichen).

Ein Hinweis zur Performance

Web-Schriftarten sind großartig für das Design, aber es ist auch wichtig, ihre Auswirkungen auf die Web-Performance zu verstehen. Benutzerdefinierte Schriftarten verursachen oft, dass Websites einen Performance-Einbruch erleiden, da die Schriftart heruntergeladen werden muss, bevor sie angezeigt wird.

Ein häufiges Symptom war ein kurzer Moment, in dem Schriftarten zuerst als Fallback geladen werden, dann aber zur heruntergeladenen Schriftart blinken. Paul Irish hat einen älteren Beitrag dazu (genannt „FOUT“: Flash Of Unstyled Text).

Heutzutage blenden Browser den Text standardmäßig aus, bevor die benutzerdefinierte Schriftart geladen wird. Besser oder schlechter? Sie entscheiden. Sie können dies durch verschiedene Techniken etwas steuern. Etwas außerhalb des Rahmens dieses Artikels, aber hier ist ein Trifecta von Artikeln von Zach Leatherman, um Sie auf den richtigen Weg zu bringen

Hier sind einige weitere Überlegungen bei der Implementierung benutzerdefinierter Schriftarten

Auf die Dateigröße achten

Schriftarten können überraschend schwer sein, wählen Sie also Optionen, die leichtere Versionen anbieten. Bevorzugen Sie beispielsweise ein Schriftarten-Set mit 50 KB gegenüber einem mit 400 KB.

Zeichensatz nach Möglichkeit einschränken

Brauchen Sie wirklich die Fettschrift und die schwarze Schriftschnitte für eine Schriftart? Das Laden nur dessen, was verwendet wird, ist eine gute Idee, und hier gibt es einige gute Tipps.

Systemschriftarten für kleine Bildschirme in Betracht ziehen

Viele Geräte haben schlechte Verbindungen. Ein Trick könnte darin bestehen, beim Laden der benutzerdefinierten Schriftart über @media größere Bildschirme anzusprechen.

In diesem Beispiel werden Bildschirme kleiner als 1000px mit einer Systemschriftart und Bildschirme, die 1000px oder breiter sind, mit der benutzerdefinierten Schriftart versorgt.

@media (min-width: 1000px) { 
  body {
    font-family: 'FontName', Fallback, sans-serif; 
  }
}

Schriftartendienste

Es gibt eine Reihe von Diensten, die Schriftarten hosten und auch Zugriff auf kommerziell lizenzierte Schriftarten bieten. Die Vorteile der Nutzung eines Dienstes liegen oft in einer großen Auswahl an legalen Schriftarten, die effizient bereitgestellt werden (z. B. über ein schnelles CDN).

Hier sind einige gehostete Schriftartendienste

Was ist mit Icon-Schriftarten?

Es stimmt, @font-face kann eine Schriftartdatei mit Symbolen laden, die für ein Icon-System verwendet werden können. Ich denke jedoch, dass Sie mit SVG als Icon-System viel besser dran sind. Hier ist ein Vergleich der beiden Methoden.

Nächste Schritte mit @font-face

Was ist los mit der Deklaration von Schriftarteigenschaften bei @font-face?

Mehr zur @font-face-Performance

Lernerfahrungen aus einer WebPageTest-Sitzung auf CSS-Tricks

Web-Schriften mit dem Web Font Loader laden

Service-Mitteilung: Achten Sie auf Ihr @font-face font-weight

Drei Techniken für die performante Nutzung benutzerdefinierter Schriften

#152: Schriftarten laden mit Zach Leatherman

Verwandte CSS-Eigenschaften

Eine font-display-Einstellung für langsame Verbindungen

Mehr @font-face Ressourcen