font-variant-alternates: OpenType-Features für typografische Feinheiten
AI generated
{ }
@
CSS · Typografie · OpenType
font-variant-alternates
OpenType-Features für typografische Feinheiten gezielt nutzen

Jede professionelle Schriftdatei enthält weit mehr als einen einzigen Zeichensatz: Ligaturen, alternative Glyphen, Kapitälchen und stilistische Sets liegen fertig in der Font-Datei, bleiben aber ungenutzt, solange niemand sie über CSS anspricht. font-variant-alternates und seine Geschwister-Properties machen genau das möglich, ohne JavaScript und ohne zusätzliche Schriftdateien.

13 Min. Lesezeit OpenType · GSUB/GPOS font-variant-* · font-feature-settings

1. OpenType-Features im Web: warum es eigene font-variant-Properties gibt

OpenType-Schriftdateien speichern zusätzlich zu den reinen Glyphen-Umrissen sogenannte Features, benannte Regeln in den GSUB- und GPOS-Tabellen der Schriftdatei, die festlegen, wie bestimmte Zeichenfolgen ersetzt oder positioniert werden sollen. Ein Feature mit dem Tag liga ersetzt etwa die Buchstabenfolge fi durch eine verbundene Ligatur-Glyphe, ein Feature wie smcp ersetzt Kleinbuchstaben durch Kapitälchen-Glyphen. Ohne CSS-Ansteuerung bleiben all diese Features ungenutzt, selbst wenn die Schriftdatei sie mitbringt.

CSS bietet dafür zwei Ebenen: Die font-variant-*-Properties (font-variant-ligatures, font-variant-alternates, font-variant-caps, font-variant-numeric, font-variant-east-asian) sprechen typografische Konzepte mit sprechenden Werten an, ohne dass Autoren die zugrunde liegenden vierstelligen OpenType-Tags kennen müssen. font-feature-settings arbeitet dagegen auf niedrigerer Ebene direkt mit diesen Tags. Für die meisten Anwendungsfälle sind die font-variant-Properties die bessere Wahl, weil sie lesbarer sind und der Browser bei fehlender Unterstützung sauber auf den Standardwert zurückfällt.

2. font-variant-ligatures: Standard-, Discretionary- und historische Ligaturen

font-variant-ligatures steuert, welche Ligaturen der Browser aktiviert. Der Wert common-ligatures (Standardwert in den meisten Browsern) aktiviert Standardligaturen wie fi oder fl, die in professionellen Schriftarten fast immer vorhanden sind und die Lesbarkeit meist verbessern, ohne aufzufallen. discretionary-ligatures schaltet zusätzliche, dekorative Ligaturen ein, die eine Schriftart optional mitbringt, etwa verschnörkelte Verbindungen zwischen bestimmten Buchstabenpaaren, die bewusst auffallen sollen.

historical-ligatures aktiviert Ligaturen, die aus historischen Schreibweisen stammen und heute eher in editorialem oder dekorativem Kontext eingesetzt werden, etwa bei Einladungskarten oder stilisierten Überschriften. no-common-ligatures deaktiviert selbst die Standardligaturen explizit, was in technischen Kontexten sinnvoll sein kann, in denen jede Zeichenfolge exakt einzeln erkennbar bleiben soll, etwa in Codeblöcken oder bei der Darstellung von Variablennamen.

3. font-variant-alternates: stilistische Sets, character-variant und swash

font-variant-alternates greift auf komplexere OpenType-Features zu, die eine Schriftart oft in mehreren benannten Varianten anbietet, etwa styleset() für stilistische Sets (ssXX-Tags), character-variant() für einzelne alternative Zeichenformen (cvXX-Tags) und swash() für verschnörkelte Anfangsbuchstaben. Weil diese Features je nach Schriftart unterschiedlich benannt und nummeriert sind, verlangt font-variant-alternates zusätzlich einen @font-feature-values-Block, der einen sprechenden Namen auf die schriftartspezifische Nummer abbildet.

Diese Indirektion mag auf den ersten Blick umständlich wirken, sorgt aber dafür, dass derselbe CSS-Code lesbar bleibt, auch wenn im Hintergrund unterschiedliche Schriftarten mit unterschiedlicher interner Nummerierung eingesetzt werden. Ohne den passenden @font-feature-values-Block ignoriert der Browser die styleset()- oder character-variant()-Anweisung stillschweigend und fällt auf die Standardglyphen zurück, was das Debuggen erschwert, wenn der Block fehlt oder einen Tippfehler enthält.


@font-feature-values "Custom Serif" {
  @styleset {
    swashy-caps: 1;
  }
  @character-variant {
    alt-ampersand: 2;
  }
}

h1 {
  font-family: "Custom Serif", serif;
  font-variant-alternates: styleset(swashy-caps) character-variant(alt-ampersand);
}

4. font-variant-caps: Kapitälchen, Unicase und Titling Caps

font-variant-caps bündelt mehrere Großbuchstaben-Varianten unter einer Property. small-caps ersetzt Kleinbuchstaben durch kleinere, echte Kapitälchen-Glyphen (nicht einfach skalierte Großbuchstaben), was insbesondere für Abkürzungen im Fließtext ein deutlich ruhigeres Schriftbild ergibt als text-transform: uppercase. all-small-caps wendet dieselbe Ersetzung zusätzlich auf bereits vorhandene Großbuchstaben an, sodass ein komplett gleichmäßiges Kapitälchen-Bild entsteht.

titling-caps liefert spezielle, für große Schriftgrade optimierte Großbuchstaben-Glyphen, die in Überschriften oft ausgewogener wirken als die regulären Versalien derselben Schriftart. unicase aktiviert eine einheitliche Glyphenform, bei der Groß- und Kleinschreibung optisch kaum noch unterscheidbar sind, ein Stilmittel, das vor allem in reduzierter, geometrischer Typografie zum Einsatz kommt. Alle diese Werte funktionieren nur, wenn die eingesetzte Schriftart die entsprechenden OpenType-Features tatsächlich mitbringt, sonst bleibt die Darstellung unverändert.


.abkuerzung {
  font-variant-caps: small-caps;
}

h1.editorial {
  font-variant-caps: titling-caps;
}

5. font-feature-settings als Low-Level-Fallback: wann man es noch braucht

font-feature-settings spricht OpenType-Features direkt über ihre vierstelligen Tags an, etwa font-feature-settings: 'liga' 1, 'kern' 1. Das ist mächtiger, weil es jedes Feature ansprechen kann, das eine Schriftart mitbringt, auch solche, für die es keine eigene font-variant-Property gibt, etwa stylistic-set-Kombinationen außerhalb des Standard-Bereichs oder experimentelle Features einzelner Foundries.

Der Nachteil: font-feature-settings umgeht die semantische Ebene vollständig, ein Wert wie 'ss01' 1 sagt nichts darüber aus, was dieses Feature eigentlich bewirkt, und mehrere font-feature-settings-Deklarationen auf verschiedenen Ebenen überschreiben sich gegenseitig komplett statt sich zu ergänzen, anders als bei den font-variant-Properties. In der Praxis gilt daher: font-variant-* zuerst probieren, font-feature-settings nur für Features einsetzen, die keine eigene Property haben.

6. Praktisches Rezept: eine robuste @font-feature-values-Fallback-Kette

Weil styleset()- und character-variant()-Nummern zwischen Schriftarten variieren, empfiehlt sich ein @font-feature-values-Block pro eingesetzter Schriftfamilie, der dieselben sprechenden Namen konsistent auf die jeweils richtige interne Nummer abbildet. So bleibt der eigentliche CSS-Code, der font-variant-alternates verwendet, unabhängig davon, welche konkrete Schriftart gerade geladen ist, solange für jede Schriftart ein passender Block existiert.

Für Schriftarten ohne das gewünschte Feature bleibt font-variant-alternates einfach wirkungslos, der Browser fällt automatisch auf die Standardglyphen zurück, ohne dass ein Fehler entsteht. Diese Eigenschaft macht font-variant-alternates zu progressive enhancement im eigentlichen Sinn: Wer die passende Schriftart lädt, sieht die Feinheiten, wer eine andere Schriftart einsetzt oder auf eine Fallback-Schriftart ausweicht, sieht weiterhin lesbaren, korrekten Text.


@font-feature-values "Editorial Display" {
  @styleset {
    swashy-caps: 1;
  }
}

@font-feature-values "Fallback Serif" {
  @styleset {
    swashy-caps: 3;
  }
}

.headline {
  font-family: "Editorial Display", "Fallback Serif", serif;
  font-variant-alternates: styleset(swashy-caps);
}

7. Zusammenspiel mit Variable Fonts: font-variation-settings ist etwas anderes

Ein häufiges Missverständnis ist, font-variant-alternates und font-variation-settings für dasselbe Konzept zu halten, obwohl sie unterschiedliche Technologien ansprechen. font-variant-alternates schaltet OpenType-Features (GSUB/GPOS) an, die feste, alternative Glyphen austauschen. font-variation-settings dagegen steuert die kontinuierlichen Design-Achsen eines Variable Fonts, etwa Gewicht (wght) oder Breite (wdth), die stufenlos zwischen definierten Werten interpolieren, statt eine feste Glyphe durch eine andere zu ersetzen.

Beide Mechanismen lassen sich in derselben Schriftart und demselben CSS-Regelblock kombinieren: Ein Variable Font kann sowohl variable Achsen für Gewicht und Breite als auch klassische OpenType-Features für Ligaturen und Kapitälchen mitbringen. In der Praxis bedeutet das, font-variation-settings für die Achsensteuerung zu verwenden und font-variant-alternates beziehungsweise die anderen font-variant-Properties parallel dafür einzusetzen, feste Glyphenaustausche zu aktivieren, ohne die beiden Konzepte zu vermischen.


.headline {
  font-family: "Variable Display";
  font-variation-settings: "wght" 650, "wdth" 110;
  font-variant-ligatures: discretionary-ligatures;
  font-variant-caps: small-caps;
}

8. Performance und Browser-Support: eine Teststrategie für den produktiven Einsatz

Die font-variant-Properties selbst kosten keine spürbare Rendering-Performance, weil das Ersetzen der Glyphen während des Text-Shapings passiert, ein Schritt, den der Browser ohnehin für jede Textdarstellung durchläuft. Die eigentliche Kostenfrage betrifft die Schriftdatei: Fonts mit vielen OpenType-Features sind tendenziell größer, weil zusätzliche Glyphen und Feature-Tabellen mitgeliefert werden müssen, was bei der Auswahl einer Schriftart für performancekritische Seiten mit abgewogen werden sollte.

Für den Support-Check reicht in der Praxis ein einfacher visueller Vergleich in den relevanten Zielbrowsern, weil font-variant-alternates und font-variant-caps fehlertolerant sind: Fehlt Unterstützung oder das passende Feature in der Schriftart, wird schlicht die Standardglyphe angezeigt, niemals ein fehlerhaftes oder kaputtes Layout. Das erlaubt, die Features produktiv einzusetzen, ohne aufwendige Browser-Weichen oder @supports-Abfragen aufbauen zu müssen.

9. Praxisbeispiel Editorial-Layout: Überschrift mit Swash, Fließtext ohne Extras

Ein typisches Editorial-Layout setzt OpenType-Features gezielt und sparsam ein: Die große Überschrift bekommt swash() für einen verschnörkelten Anfangsbuchstaben und discretionary-ligatures für einen dekorativen Charakter, während der Fließtext bewusst nur common-ligatures behält, um Lesbarkeit über weite Textmengen nicht zu gefährden. Zu viele aktivierte Alternates im Fließtext wirken schnell unruhig und lenken vom eigentlichen Inhalt ab.

Abkürzungen im Fließtext, etwa Firmennamen oder technische Kürzel, profitieren dagegen gezielt von font-variant-caps: small-caps, weil sie sich dadurch optisch besser in den Textfluss einfügen als vollständig großgeschriebene Wörter, die im Fließtext oft wie ein Ausrufezeichen wirken. Diese gezielte, kontextabhängige Kombination verschiedener Features ist der eigentliche Mehrwert gegenüber einer pauschalen text-transform-Lösung.

Property Zweck Braucht @font-feature-values Typischer Einsatz
font-variant-ligatures Standard-, discretionary-, historische Ligaturen Nein Fließtext, Überschriften
font-variant-alternates styleset(), character-variant(), swash() Ja Editorial-Layouts, Logos
font-variant-caps small-caps, titling-caps, unicase Nein Abkürzungen, große Überschriften
font-feature-settings Direkter Zugriff auf beliebige OpenType-Tags Nein Features ohne eigene Property
font-variation-settings Kontinuierliche Variable-Font-Achsen Nein Gewicht, Breite, optische Größe

Mironsoft

Modernes CSS, Layout-Architektur und Rendering-Performance

CSS, das wartbar bleibt statt mit jeder Änderung zu brechen?

Wir prüfen bestehende Stylesheets auf Spezifitäts-Chaos und Layout-Thrashing und bauen daraus eine CSS-Architektur mit Cascade Layers, Custom Properties und modernen Layout-Primitiven, die auch nach dem zehnten Feature noch verständlich ist.

CSS-Audit

Spezifität, Cascade-Konflikte und ungenutzte Selektoren systematisch aufdecken.

Architektur-Refactoring

Cascade Layers, Custom Properties und Design Tokens sauber einführen.

Performance-Tuning

Layout-Thrashing, teure Selektoren und Rendering-Engpässe gezielt beheben.

10. Zusammenfassung

font-variant-alternates: Das Wichtigste auf einen Blick

Grundprinzip

OpenType-Schriftdateien enthalten Features in GSUB/GPOS-Tabellen, die erst über CSS-Properties wie font-variant-alternates aktiviert werden.

Named Values

styleset() und character-variant() brauchen einen @font-feature-values-Block, der sprechende Namen auf die schriftartspezifische Feature-Nummer abbildet.

Fallback-Sicherheit

Fehlt ein Feature in der Schriftart, fällt der Browser stillschweigend auf die Standardglyphe zurück, es entsteht nie ein kaputtes Layout.

Variable Fonts

font-variation-settings steuert kontinuierliche Achsen wie Gewicht, font-variant-alternates schaltet feste Glyphenaustausche an, beides lässt sich kombinieren.

11. FAQ: font-variant-alternates: Das Wichtigste auf einen Blick

1Was ist der Unterschied zwischen font-variant-alternates und font-feature-settings?
font-variant-alternates spricht typografische Konzepte mit sprechenden Namen an und braucht für benannte Werte einen @font-feature-values-Block. font-feature-settings arbeitet direkt mit den vierstelligen OpenType-Tags und ist entsprechend weniger lesbar.
2Wozu brauche ich einen @font-feature-values-Block?
Er bildet einen sprechenden Namen auf die schriftartspezifische Nummer eines stilistischen Sets oder einer Zeichenvariante ab, da diese Nummern zwischen verschiedenen Schriftarten unterschiedlich sind.
3Was passiert, wenn eine Schriftart ein Feature nicht unterstützt?
Der Browser ignoriert die Anweisung und zeigt die Standardglyphe, es entsteht kein Fehler und kein kaputtes Layout. Das macht font-variant-Properties fehlertolerant einsetzbar.
4Ist font-variant-caps: small-caps dasselbe wie text-transform: uppercase?
Nein. small-caps setzt echte, kleinere Kapitälchen-Glyphen aus der Schriftdatei ein, text-transform: uppercase skaliert lediglich die vorhandenen Großbuchstaben und verändert keine Glyphenform.
5Kann ich font-variant-alternates mit Variable Fonts kombinieren?
Ja, beide Mechanismen sind unabhängig voneinander. font-variation-settings steuert kontinuierliche Achsen wie Gewicht, font-variant-alternates schaltet parallel feste OpenType-Features an.
6Sollte ich Ligaturen im Fließtext generell aktivieren?
common-ligatures ist in den meisten Browsern bereits Standard und verbessert die Lesbarkeit unauffällig. discretionary- und historical-ligatures sollten dagegen gezielt für Überschriften oder dekorative Kontexte reserviert bleiben.
7Wie finde ich heraus, welche Features eine Schriftart mitbringt?
Font-Inspektions-Tools wie Wakamai Fondue oder die Entwicklerdokumentation der jeweiligen Foundry listen die verfügbaren OpenType-Feature-Tags und die Nummerierung der stilistischen Sets auf.
8Kostet font-variant-alternates spürbar Rendering-Performance?
Nein, das Ersetzen der Glyphen passiert während des ohnehin nötigen Text-Shapings. Die relevante Kostenfrage ist eher die Dateigröße von Schriftarten mit vielen zusätzlichen Feature-Glyphen.
9Muss ich @supports für font-variant-Properties verwenden?
In der Praxis nicht, weil die Properties selbst fehlertolerant sind und ohne Support einfach ignoriert werden. @supports lohnt sich höchstens für sehr spezielle, seltene Werte.
10Was ist swash() konkret?
swash() aktiviert das OpenType-Feature für verschnörkelte, dekorative Anfangs- oder Endbuchstaben, die eine Schriftart als eigene Glyphenvariante mitbringt, meist für Überschriften oder Einladungskarten gedacht.