Start · Sprachen · JavaScript · Referenz · FontFace.stretch

FontFace.stretch

Eigenschaft

Liest oder setzt als String, wie breit die Schrift gedehnt oder gestaucht ist. Der Wert entspricht dem CSS-Deskriptor <code>font-stretch</code> in <code>@font-face</code>.

seit JavaScript Baseline: alle modernen Browser (seit ca. 2020) Kategorie: webapi

Signatur

FontFace.stretch

Beschreibung

Die Eigenschaft stretch einer FontFace-Instanz entspricht dem Deskriptor font-stretch innerhalb einer @font-face-Regel. Sie legt fest, welche Schriftbreite (gestaucht, normal oder gedehnt) diese Schriftdatei abdeckt. Der Browser nutzt diese Angabe bei der Schriftauswahl: Verlangt ein Element im CSS font-stretch: condensed, wählt er innerhalb derselben font-family das FontFace-Objekt mit dem passenden stretch-Wert.

Gültige Werte sind die Schlüsselwörter normal, ultra-condensed, extra-condensed, condensed, semi-condensed, semi-expanded, expanded, extra-expanded, ultra-expanded sowie Prozentwerte (z. B. "75%"). Bei variablen Schriften mit einer wdth-Achse kannst du einen Bereich mit zwei Werten angeben, etwa "75% 125%". Standardwert ist "normal".

Setzen lässt sich der Wert entweder über den Deskriptor stretch im Konstruktor new FontFace(family, source, { stretch }) oder nachträglich per Zuweisung. Das ist praktisch, wenn Schriften dynamisch per JavaScript geladen werden, etwa aus einem Nutzer-Upload oder für eine Schriftvorschau. Die Eigenschaft beschreibt nur, welche Breite die Datei abdeckt. Sie verzerrt die Glyphen nicht künstlich.

Parameter

Name Typ Default Beschreibung
$value string "normal" Beim Setzen ein gültiger font-stretch-Deskriptorwert: ein Schlüsselwort, ein Prozentwert oder ein Bereich aus zwei Prozentwerten ("75% 125%").

Rückgabewert

Typ
string
Beschreibung
Der aktuelle font-stretch-Wert der Schrift als String, z. B. "normal", "condensed" oder "75% 125%".

Beispiele

Gestauchte Schrift im Konstruktor festlegen

const condensed = new FontFace(
  'Roboto',
  'url(/fonts/Roboto-Condensed.woff2)',
  { stretch: 'condensed', weight: '400' }
);

console.log(condensed.stretch);

await condensed.load();
document.fonts.add(condensed);

// Im CSS greift nun: .schmal { font-family: Roboto; font-stretch: condensed; }
condensed

Wert nachträglich ändern

const font = new FontFace('Open Sans', 'url(/fonts/OpenSans-Expanded.woff2)');
console.log(font.stretch); // Standardwert

font.stretch = 'expanded';
console.log(font.stretch);
normal expanded

Variable Schrift mit Breitenbereich

const variable = new FontFace(
  'Inter Var',
  'url(/fonts/InterVariable.woff2)',
  { stretch: '75% 125%', weight: '100 900' }
);

await variable.load();
document.fonts.add(variable);

document.body.style.fontFamily = '"Inter Var"';
document.body.style.fontStretch = '87.5%';

console.log(variable.stretch);
75% 125%

Alle geladenen Schriften mit ihrer Breite auflisten

await document.fonts.ready;

for (const face of document.fonts) {
  console.log(`${face.family}: ${face.stretch} (${face.status})`);
}
"Roboto": condensed (loaded) "Inter Var": 75% 125% (loaded)

// Wichtig · Fallstricke

  • Ungültige Werte: Weist du einen ungültigen String zu (z. B. font.stretch = 'breit'), wirft der Setter einen SyntaxError (DOMException). Übergibst du den ungültigen Wert dagegen im Konstruktor, wird die Schrift fehlerhaft: status wird "error", und loaded wird abgelehnt.
  • Keine künstliche Verzerrung: stretch dehnt die Glyphen nicht. Die Angabe dient nur der Schriftauswahl. Die Schriftdatei muss die gewünschte Breite tatsächlich enthalten, entweder als eigene Datei oder als wdth-Achse einer variablen Schrift.
  • Serialisierung: Browser können den gelesenen Wert normalisieren. Ein Prozentwert kann also anders zurückkommen, als er gesetzt wurde. Vergleiche Werte deshalb nicht blind als Strings.
  • Kompatibilität: Die Eigenschaft wird in Chrome, Edge, Firefox und Safari unterstützt, auch in Web Workern über self.fonts. Wie gut Bereiche bei variablen Schriften unterstützt werden, hängt von der Browserversion ab.
  • Änderst du den Wert, nachdem die Schrift mit document.fonts.add() registriert wurde, wirkt sich das sofort auf die Schriftauswahl aus. Das kann ein erneutes Layout auslösen.