CSS-Größenanpassung für @font-face

Wenn eine Webschriftart geladen wird, können Sie jetzt deren Skalierung anpassen, um die Schriftgrößen im Dokument zu normalisieren und Layoutverschiebungen beim Wechseln zwischen Schriftarten zu verhindern.

Sehen Sie sich die folgende Demo an, in der font-size ein konsistenter 64px ist und der einzige Unterschied zwischen den einzelnen Headern das font-family ist. Die Beispiele auf der linken Seite wurden nicht angepasst und haben eine inkonsistente endgültige Größe. In den Beispielen auf der rechten Seite wird size-adjust verwendet, damit 64px die einheitliche endgültige Größe hat.

In diesem Beispiel werden die Debugging-Tools für das CSS-Rasterlayout in den Chrome-Entwicklertools verwendet, um Höhen anzuzeigen.

In diesem Beitrag wird der neue CSS-Font-face-Deskriptor namens size-adjust beschrieben. Es zeigt auch einige Möglichkeiten zum Korrigieren und Normalisieren von Schriftgrößen für eine reibungslosere Nutzererfahrung, einheitliche Designsysteme und ein vorhersehbares Seitenlayout. Ein wichtiger Anwendungsfall ist die Optimierung des Renderings von Webschriftarten, um Cumulative Layout Shift (CLS) zu verhindern.

Unterstützte Browser

  • 92
  • 92
  • 92
  • 17

Quelle

Hier ist eine interaktive Demo des Problembereichs. Ändern Sie die Schriftart im Dropdown-Menü und beobachten Sie:

  1. Die Höhenunterschiede in den Ergebnissen.
  2. Visuell verstörende Inhaltsverschiebungen.
  3. Interaktive Zielbereiche verschieben (das Drop-down-Menü springt hin und her!)

Schriftarten mit size-adjust skalieren

Eine Einführung in die Syntax:

@font-face {
  font-family: "Adjusted Typeface";
  size-adjust: 150%;
  src: url(some/path/to/typeface.woff2) format('woff2');
}
  1. Erstellt ein benutzerdefiniertes Schriftbild mit dem Namen Adjusted Typeface.
  2. Verwendet size-adjust, um jede Glyphe auf 150% ihrer Standardgröße zu skalieren.
  3. Betrifft nur das einzelne importierte Schriftbild.

Verwenden Sie die obige benutzerdefinierte Schriftart wie folgt:

h1 {
  font-family: "Adjusted Typeface";
}

CLS durch nahtlosen Austausch von Schriftarten verringern

Im folgenden GIF sehen Sie die Beispiele auf der linken Seite und sehen, wie sich beim Ändern der Schriftart eine Änderung ergibt. Dies ist nur ein kleines Beispiel mit einem einzigen Anzeigentitel-Element. Das Problem ist sehr auffällig.

Im Beispiel auf der linken Seite gibt es Layout Shifts, im rechten nicht.

Eine gute Methode zur Verbesserung des Schriftrendering ist das Austauschen der Schriftarten. Rendern Sie eine Systemschrift, die schnell lädt, sodass zuerst der Inhalt angezeigt wird. Ersetzen Sie sie anschließend durch eine Webschriftart, sobald die Webschrift geladen ist. So profitieren Sie von den Vorteilen beider Welten: Die Inhalte sind so schnell wie möglich sichtbar und Ihre Seite ist ansprechend gestaltet, ohne dass die Nutzer Zeit für die Inhalte aufwenden müssen. Das Problem besteht jedoch darin, dass beim Laden der Webschriftart manchmal die gesamte Seite verschoben wird, da sie eine etwas andere Feldhöhe hat.

mehr Inhalte bedeuten mehr mögliche Layoutverschiebungen beim Wechsel der Schriftarten

Wenn Sie size-adjust in die @font-face-Regel aufnehmen, wird eine globale Glyphenanpassung für die Schriftart festgelegt. Das richtige Timing führt zu minimalen visuellen Änderungen, also einem nahtlosen Austausch. Um einen nahtlosen Austausch zu ermöglichen, können Sie die Größe manuell anpassen oder diesen Rechner zur Größenanpassung von Malte Ubl ausprobieren.

Wähle eine Google-Webschrift aus und hol dir ein bereits angepasstes @font-face-Snippet zurück.

Die Behebung des Schriftgrößenproblems am Anfang dieses Beitrags wurde durch Versuch und Irrtum umgesetzt. size-adjust wurde im Quellcode so lange daran erinnert, bis derselbe Header in Cookie und Arial dasselbe 64px wie Press Start 2P gerendert hat. Ich habe zwei Schriftarten auf eine Zielschriftgröße ausgerichtet.

@font-face {
  font-family: 'Adjusted Arial';
  size-adjust: 86%;
  src: local(Arial);
}

@font-face {
  font-family: 'Cookie';
  size-adjust: 90.25%;
  src: url(...woff2) format('woff2');
}

Schriftarten kalibrieren

Sie als Autor legen die Kalibrierungsziele für die Normalisierung der Schriftgröße fest. Sie könnten nach Times, Arial oder einer Systemschrift normalisieren und dann benutzerdefinierte Schriftarten entsprechend anpassen. Sie können auch lokale Schriftarten an den Download anpassen.

Strategien für die size-adjust-Kalibrierung:

  1. Remote-Ziel:
    Sie können lokale Schriftarten in Bezug auf heruntergeladene Schriftarten anpassen.
  2. Lokales Ziel:
    Passen Sie heruntergeladene Schriftarten an die lokalen Zielschriftarten an.

Beispiel 1: Remote-Ziel

Mit dem folgenden Snippet wird eine lokal verfügbare Schriftart an die Größe einer benutzerdefinierten Remote-src-Schriftart angepasst. Eine Remote-Benutzerdefinierte Schriftart ist das Ziel für die Kalibrierung, z. B. eine Markenschrift:

@font-face {
  font-family: "Adjusted Regular Arial For Brand";
  src: local(Arial);
  size-adjust: 90%;
}

@font-face {
  font-family: "Rad Brand";
  src: url(some/path/to/a.woff2) format('woff2');
}

html {
  font-family: "Rad Brand", "Adjusted Regular Arial For Brand";
}

In diesem Beispiel wird die lokale Schriftart Arial im Hinblick auf eine geladene benutzerdefinierte Schriftart für einen nahtlosen Austausch angepasst.

Diese Strategie hat den Vorteil, dass Designer und Entwickler dieselbe Schriftart für Größe und Typografie erhalten. Die Marke ist das Kalibrierungsziel. Das sind tolle Neuigkeiten für Designsysteme.

Maltes Rechner hat auch eine Schriftart als Ziel. Wenn Sie eine Google-Schriftart auswählen, wird für den nahtlosen Austausch berechnet, wie die Arial angepasst werden soll. Hier sehen Sie ein Beispiel für Roboto-CSS-Code aus dem Rechner, in dem Arial geladen wird und den Namen "Roboto-fallback" enthält:

@font-face {
    font-family: "Roboto-fallback";
    size-adjust: 100.06%;
    src: local("Arial");
}

Im folgenden Beispiel sehen Sie eine vollständig plattformübergreifende Anpassung. Darin werden zwei angepasste lokale Fallback-Schriftarten in Erwartung einer Markenschrift dargestellt.

@font-face {
    font-family: "Roboto-fallback-1";
    size-adjust: 100.06%;
    src: local("Arial");
}

@font-face {
    font-family: "Roboto-fallback-2";
    size-adjust: 99.94%;
    src: local("Arimo");
}

@font-face {
  font-family: "Roboto Regular";
  src: url(some/path/to/roboto.woff2) format('woff2');
}

html {
  font-family: "Roboto Regular", "Roboto-fallback-1", "Roboto-fallback-2";
}

Beispiel 2: Lokales Ziel

Sehen Sie sich das folgende Snippet an, mit dem eine benutzerdefinierte Schriftart für die Marke so angepasst wird, dass sie mit Arial übereinstimmt:

@font-face {
  font-family: "Rad Brand - Adjusted For Arial";
  src: url(some/path/to/a.woff2) format('woff2');
  size-adjust: 110%;
}

html {
  font-family: "Rad Brand - Adjusted For Arial", Arial;
}

Der Vorteil dieser Strategie besteht darin, dass keine Anpassungen vorgenommen werden und dann alle eingehenden Schriftarten entsprechend angepasst werden.

Präzisere Abstimmung mit ascent-override, descent-override und line-gap-override

Wenn die allgemeine Skalierung von Symbolen für Ihre Design- oder Ladestrategien nicht ausreicht, können Sie die folgenden Feinabstimmungsoptionen in Verbindung mit size-adjust optimieren. Die Eigenschaften ascent-override, descent-override und line-gap-override sind derzeit in Chromium 87 oder höher bzw. Firefox 89 und höher implementiert.

Schere oben und lass die Wortüberschreibungen
zu, um die Bereiche aufzuzeigen,

ascent-override

Unterstützte Browser

  • 87
  • 87
  • 89
  • x

Quelle

Der Deskriptor ascent-override definiert die Höhe über der Baseline einer Schriftart.

@font-face {
  font-family: "Ascent Adjusted Arial Bold";
  src: local(Arial Bold);
  ascent-override: 71%;
}

Der rote Anzeigentitel (nicht angepasst) hat Platz über dem Großbuchstaben A und O. Der blaue Anzeigentitel wurde so angepasst, dass seine Höhe an der gesamten Begrenzungsrahmen angepasst wird.

descent-override

Unterstützte Browser

  • 87
  • 87
  • 89
  • x

Quelle

Der Deskriptor descent-override definiert die Höhe unter der Baseline der Schriftart.

@font-face {
  font-family: "Ascent Adjusted Arial Bold";
  src: local(Arial Bold);
  descent-override: 0%;
}

Die rote Überschrift (nicht angepasst) hat Platz unter den Referenzlinien D und O. Die blaue Überschrift wurde so angepasst, dass die Buchstaben an der Grundlinie anliegen.

line-gap-override

Unterstützte Browser

  • 87
  • 87
  • 89
  • x

Quelle

Mit dem Deskriptor line-gap-override wird der Zeilenabstandsmesswert für die Schriftart definiert. Dies ist die empfohlene Linienlücke oder externe führende Schriftart.

@font-face {
  font-family: "Line Gap Adjusted Arial";
  src: local(Arial);
  line-gap-override: 50%;
}

Der rote Anzeigentitel (nicht angepasst) hat kein line-gap-override, im Grunde ist er 0%. Der blaue Anzeigentitel wurde um 50 % erhöht, wodurch entsprechend Platz über und unter den Buchstaben entsteht.

Zusammenfassung

Jede dieser Überschreibungen bietet eine weitere Möglichkeit, übermäßige Verwendung des sicheren Textbegrenzungsrahmens im Web zu entfernen. Sie können das Textfeld für eine präzise Darstellung anpassen.

Fazit

Die CSS-Funktion @font-face size-adjust ist eine interessante Möglichkeit, den Textbegrenzungsrahmen Ihrer Weblayouts anzupassen, um den Austausch von Schriftarten zu verbessern und so Layoutverschiebungen zu vermeiden. Weitere Informationen finden Sie in diesen Ressourcen:

Foto von Kristian Strand auf Unsplash