@font-face

Zuletzt aktualisiert am 15. Februar 2026

@font-face registriert eine eigene Schriftart, die du dann mit font-family verwenden kannst. Die At-Rule definiert den Namen der Schrift, die Quelle (URL oder lokale Datei) und optionale Eigenschaften wie Gewicht und Stil. Mit dem Descriptor font-display steuerst du, wie der Browser Text anzeigt, während die Schrift noch lädt. Das Format woff2 ist heute der Standard: Es bietet die beste Kompression und wird von allen modernen Browsern unterstützt. Richtig eingesetzt, ermöglicht @font-face die volle Kontrolle über die Typografie deiner Website.

Syntax
@font-face { font-family: <name>; src: <url> [format()]; }
Initialwert
N/A (At-Rule)
Vererbt
Nein
Animierbar
Nein

Grundlagen

@font-face ist keine reguläre CSS-Eigenschaft, sondern eine At-Rule: eine spezielle Anweisung, die eine Schriftart beim Browser registriert. Die Mindest-Angaben sind font-family (der Name, unter dem du die Schrift verwendest) und src (wo die Schriftdatei liegt). Der Browser lädt die Schrift erst, wenn sie tatsächlich auf der Seite verwendet wird, nicht schon beim Einlesen der @font-face-Regel.

Der src-Descriptor unterstützt url() für externe Dateien und local() für lokal installierte Schriften. Du kannst mehrere Quellen angeben, getrennt durch Komma: Der Browser nimmt die erste, die funktioniert. Mit format() gibst du an, welches Format die Datei hat, damit der Browser Formate überspringen kann, die er nicht unterstützt. Für moderne Browser reicht woff2 allein aus; woff als Fallback ist nur für sehr alte Browser nötig.

font-display ist der wichtigste Performance-Descriptor. Er steuert, was passiert, während die Schrift lädt: Text unsichtbar machen (FOIT, Flash of Invisible Text), sofort einen Fallback zeigen und bei Laden tauschen (FOUT, Flash of Unstyled Text), oder die Schrift optional nur verwenden wenn sie schnell genug da ist. Für die meisten Websites ist font-display: swap oder font-display: fallback die beste Wahl.

Syntax & Werte

font-display Werte

Wert Beschreibung Beispiel
auto Browser entscheidet über das Ladeverhalten (Standard). Meistens wie block. font-display: auto
block Text unsichtbar bis Schrift geladen (FOIT). Block-Phase bis zu 3 Sekunden. font-display: block
swap Sofort Fallback-Schrift anzeigen, bei Laden austauschen (FOUT). Schrift wird immer geladen. font-display: swap
fallback Kurze Block-Phase (100ms), dann Fallback. Tauscht nur, wenn Schrift innerhalb ca. 3s geladen. font-display: fallback
optional Kurze Block-Phase, verwendet Schrift nur wenn sofort verfügbar. Beste Performance. font-display: optional

Beispiele

Grundlegende @font-face Deklaration

Eine einfache @font-face-Regel mit woff2-Format und einem Fallback auf woff. Der font-display: swap sorgt dafür, dass Text sofort sichtbar ist.

Grundlegende @font-face Deklaration
@font-face {
  font-family: "MeineSchrift";
  src:
    url("/fonts/meineschrift.woff2") format("woff2"),
    url("/fonts/meineschrift.woff") format("woff");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/* Verwendung */
body {
  font-family: "MeineSchrift", sans-serif;
}

Mehrere Gewichte laden

Für jedes Gewicht erstellst du eine separate @font-face-Regel mit demselben font-family-Namen. Der Browser wählt automatisch den passenden Schnitt basierend auf der font-weight-Angabe.

Mehrere Gewichte mit separaten @font-face-Regeln
/* Regular (400) */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/* Bold (700) */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* Der Browser wählt automatisch den richtigen Schnitt */
body { font-family: "Inter", sans-serif; }
h1   { font-weight: 700; } /* → inter-bold.woff2 */
p    { font-weight: 400; } /* → inter-regular.woff2 */

font-display Strategien im Vergleich

Die Wahl von font-display beeinflusst, wie der Nutzer die Seite beim ersten Laden erlebt. Jede Strategie hat einen anderen Kompromiss zwischen Performance und visuellem Ergebnis.

font-display Strategien
/* Empfohlen: Text sofort sichtbar, Font wird getauscht */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter.woff2") format("woff2");
  font-display: swap;
}

/* Guter Kompromiss: Minimiert Layout Shift */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter.woff2") format("woff2");
  font-display: fallback;
}

/* Beste Performance: Font nur aus Cache */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter.woff2") format("woff2");
  font-display: optional;
}

Variable Font laden

Variable Fonts bündeln alle Gewichte in einer einzigen Datei. Statt mehrere @font-face-Regeln für 400 und 700 zu definieren, lädst du eine Datei und gibst den Gewichtsbereich an.

Variable Font mit Gewichtsbereich
/* Eine Datei für alle Gewichte */
@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-variable.woff2") format("woff2");
  font-weight: 100 900; /* Gewichtsbereich */
  font-style: normal;
  font-display: swap;
}

/* Jetzt können beliebige Gewichte verwendet werden */
.thin   { font-weight: 100; }
.light  { font-weight: 300; }
.custom { font-weight: 450; } /* Stufenlos! */
.bold   { font-weight: 700; }
.black  { font-weight: 900; }

Barrierefreiheit

Verwende font-display: swap oder font-display: fallback, damit Text immer lesbar ist, während die Schrift lädt. font-display: block macht Text bis zu 3 Sekunden unsichtbar. Das ist ein Barrierefreiheitsproblem, weil Nutzer nichts lesen können. Screenreader lesen den Text zwar trotzdem vor, aber sehende Nutzer mit langsamen Verbindungen sehen eine leere Seite.

Wähle eine Fallback-Schrift, die der Web-Font in Größe und Laufweite ähnelt. Ein großer Unterschied zwischen Fallback und Web-Font verursacht Layout Shifts beim Austausch, was für Nutzer mit vestibulären Störungen oder Konzentrationsschwierigkeiten problematisch sein kann. Die CSS-Eigenschaft size-adjust in @font-face kann helfen, die Metriken der Fallback-Schrift an die Web-Font anzugleichen.

Lade nicht zu viele Schriften und Schnitte. Jede Schriftdatei ist eine HTTP-Anfrage, die die Ladezeit erhöht. Auf langsamen Verbindungen oder älteren Geräten kann das zu spürbaren Verzögerungen führen. Für die meisten Websites reichen 2-3 Schriftschnitte (Regular, Bold, eventuell Italic).

Häufige Fehler

  • Nur woff laden statt woff2: woff2 bietet ca. 30% bessere Kompression als woff. Alle modernen Browser unterstützen woff2, ein woff-Fallback ist nur noch für sehr alte Browser nötig.
  • font-display vergessen: Ohne explizites font-display gilt auto, was in den meisten Browsern wie block funktioniert: Text ist unsichtbar, bis die Schrift geladen ist. Setze immer font-display: swap oder fallback.
  • Zu viele Schriftschnitte laden: Jeder Schnitt (Regular, Bold, Italic, Bold Italic, Light, Medium…) ist eine separate HTTP-Anfrage. Lade nur die Gewichte, die du tatsächlich verwendest. Zwei oder drei Schnitte reichen für die meisten Websites.
  • local() falsch verwenden: local("Inter") sucht nach einer lokal installierten Schrift mit exakt diesem Namen. Der Name muss dem PostScript-Namen oder dem Full-Name der Schrift entsprechen, nicht dem Dateinamen.
  • Variable Font laden und trotzdem einzelne Gewichte definieren: Wenn du einen Variable Font mit font-weight: 100 900 lädst, brauchst du keine separaten @font-face-Regeln für einzelne Gewichte. Die Range-Deklaration deckt alles ab.
  • font-family-Name in @font-face anders schreiben als in der Nutzung: @font-face { font-family: "Inter"; } und body { font-family: "inter"; } funktioniert, weil CSS case-insensitive ist. Aber "Inter" und "Inter Regular" sind verschiedene Namen. Halte den Namen konsistent.

Browser-Kompatibilität

@font-face wird von allen Browsern vollständig unterstützt. woff2 wird seit 2015/2016 von allen modernen Browsern unterstützt. font-display wird seit 2018 von allen modernen Browsern unterstützt. Variable Fonts werden seit 2018 breit unterstützt.

ClientUnterstützungHinweise
ChromeKomplett
FirefoxKomplett
SafariKomplett
EdgeKomplett
OperaKomplett

Email-Kompatibilität

@font-face wird in HTML-Emails nur von wenigen Clients unterstützt. Die meisten Clients ignorieren Web-Fonts komplett und verwenden ihre Standard-Schriften.

ClientUnterstützungHinweise
Apple MailKomplettUnterstützt @font-face und Web-Fonts vollständig
GmailKeine@font-face wird komplett entfernt. Nur System-Schriften möglich
OutlookKeine@font-face wird nicht unterstützt. Fallback auf Times New Roman oder Calibri
ThunderbirdKomplettUnterstützt @font-face
Yahoo MailKeine@font-face wird entfernt

Verwandte Eigenschaften

Bleib auf dem Laufenden

Erhalte neue Inhalte direkt in dein Postfach

Mit der Anmeldung akzeptierst du unsere Datenschutzerklärung. Du kannst dich jederzeit über den Link in den E-Mails wieder abmelden.

Was erwartet dich?

Neue Artikel & Videos

Wenn ich was Neues veröffentliche, erfährst du's hier zuerst.

Plattform & Kurs-Updates

Neue Kurse, Referenz-Updates und gelegentlich Sonderpreise zum Launch.

Einmal die Woche in deinem Postfach

Kurz, auf den Punkt, kein Spam.