Leitfaden zu OpenType-Schriftmerkmalen

Schriftmerkmale oder -varianten beziehen sich auf unterschiedliche Glyphen oder Zeichenstile, die in einer OpenType-Schriftart enthalten sind. Dazu gehören Dinge wie Ligaturen (spezielle Glyphe, die Zeichen wie 'fi' oder 'ffl' kombinieren), Kerning (Anpassungen des Abstands zwischen bestimmten Buchstabenpaaren), Brüche, Zahlstile und viele andere. Diese werden alle als OpenType-Merkmale bezeichnet und sind im Web über spezifische Eigenschaften und Low-Level-Kontrolleigenschaften wie font-feature-settings verfügbar. Dieser Artikel bietet Ihnen alles, was Sie über die Verwendung von OpenType-Schriftmerkmalen in CSS wissen müssen.

Einige Schriften haben eines oder mehrere dieser Merkmale standardmäßig aktiviert (Kerning und Standardligaturen sind gängige Beispiele), während andere dem Designer oder Entwickler überlassen bleiben, um sie in bestimmten Szenarien zu aktivieren.

Zusätzlich zu den breiten Merkmalsgruppen wie Ligaturen oder Linearzahlen (Zahlen, die gleichmäßig ausgerichtet sind, im Gegensatz zu 'oldstyle', die eher wie Kleinbuchstaben aussehen) gibt es auch sehr spezielle, wie stilistische Sets (die mehrere spezifische Glyphenvarianten umfassen, die zusammen verwendet werden sollen), Alternativen (die eine oder mehrere Varianten des Buchstabens 'a' umfassen könnten) oder sogar sprachspezifische Änderungen für ostasiatische Sprachen. Im letzteren Fall sind diese Änderungen tatsächlich notwendig, um die Sprache richtig auszudrücken, und gehen über die eher stilistische Präferenz der meisten anderen OpenType-Merkmale hinaus.

Warnung: Es gibt viele CSS-Attribute, die zur Nutzung von Schriftmerkmalen definiert sind, aber leider sind viele nicht vollständig implementiert. Sie sind hier alle definiert und gezeigt, aber viele werden nur mit der Low-Level-Eigenschaft font-feature-settings funktionieren. Es ist möglich, CSS zu schreiben, das in beide Richtungen funktioniert, aber das kann umständlich werden. Das Problem mit der Verwendung von font-feature-settings für alles ist, dass jedes Mal, wenn Sie eines der individuellen Merkmale ändern möchten, Sie die gesamte Zeichenfolge neu definieren müssen (ähnlich wie beim Manipulieren variabler Schriften mit font-variation-settings).

Verfügbarkeit von Merkmalen in Schriften entdecken

Dies herauszufinden kann manchmal am schwierigsten sein, wenn Sie keine Dokumentation haben, die mit den Schriftarten geliefert wurde (viele Schriftarten-Designer und Gießereien liefern aus diesem Grund Musterseiten und CSS). Es gibt jedoch einige Websites, die es einfacher machen, dies herauszufinden. Sie können wakamaifondue.com besuchen, Ihre Schriftdatei auf den Kreis ziehen, wo es angegeben ist, und in wenigen Momenten erhalten Sie einen vollständigen Bericht über alle Fähigkeiten und Merkmale Ihrer Schriftart. Axis-praxis.org bietet auch eine ähnliche Möglichkeit, mit der Möglichkeit, auf die Merkmale zu klicken, um sie in einem bestimmten Textblock ein- oder auszuschalten.

Warum würde man sie verwenden?

Angesichts der Tatsache, dass diese Merkmale etwas Arbeit erfordern, um entdeckt und genutzt zu werden, mag es eine berechtigte Frage sein, warum man sich die Mühe machen sollte, sie zu verwenden. Die Antwort liegt in den spezifischen Merkmalen, die eine Website nützlicher, lesbarer und polierter machen:

  • Ligaturen wie 'ff' oder 'fi' machen das Letterspacing und Lesen gleichmäßiger und fließender.
  • Brüche machen Heimwerker- und Rezeptseiten viel einfacher zu lesen und zu verstehen.
  • Zahlen innerhalb von Textabsätzen, die als 'oldstyle' gesetzt sind, passen sich besser zwischen Kleinbuchstaben ein, und ebenso führt das Setzen als 'tabular numbers' dazu, dass sie besser ausgerichtet sind, wenn man eine Liste von Kosten in einer Tabelle setzt. 'lining' Zahlen hingegen stehen gleichmäßiger für sich selbst oder vor kapitalisierten Wörtern.

Auch wenn keines dieser Merkmale einzeln eine Website aufgrund ihrer Abwesenheit nutzlos machen wird, kann jedes für sich in Folge eine Website einfacher zu bedienen und aufgrund ihrer Liebe zum Detail einprägsamer machen.

OpenType-Merkmale sind wie geheime Fächer in Schriften. Schließen Sie sie auf und Sie finden Wege, wie Schriften subtil und dramatisch unterschiedlich aussehen und sich verhalten. Nicht alle OpenType-Merkmale sind immer angemessen zu verwenden, aber einige Merkmale sind entscheidend für großartige Typografie. -- Tim Brown, Leiter der Typografie bei Adobe.

Manchmal ist es Substanz, nicht nur Stil

Es gibt einige Fälle – wie mit font-variant-east-asian – bei denen OpenType-Merkmale direkt mit der Verwendung verschiedener Formen bestimmter Glyphen verbunden sind, was Bedeutung und Lesbarkeit beeinflussen kann. In solchen Fällen ist es mehr als nur eine Nettigkeit, sondern ein integraler Bestandteil des Inhalts selbst.

Die Schriftmerkmale

Es gibt eine Reihe von verschiedenen Merkmalen, die zu berücksichtigen sind. Sie sind hier nach den Hauptattributen und Optionen gruppiert und erklärt, die in den W3C-Spezifikationen behandelt werden.

Hinweis: Die unten stehenden Beispiele zeigen die Eigenschaften und einige Beispielkombinationen zusammen mit den Low-Level-Syntax-Äquivalenten. Sie stimmen möglicherweise nicht genau überein, da es Inkonsistenzen bei der Browser-Implementierung gibt, aber in vielen Fällen wird das erste Beispiel mit dem zweiten übereinstimmen. Die gezeigten Schriftarten sind Playfair Display, Source Serif Pro, IBM Plex Serif, Dancing Script und Kokoro (alle verfügbar und kostenlos zu verwenden, die meisten sind auf Google Fonts und anderen Diensten verfügbar).

Kerning

Zugehörige CSS-Eigenschaft: font-kerning

Dies bezieht sich auf den Abstand zwischen bestimmten Glyphenpaaren. Dies ist in der Regel standardmäßig aktiviert (wie von der OpenType-Spezifikation empfohlen). Es sollte beachtet werden, dass wenn letter-spacing auch für Ihren Text festgelegt ist, dieser nach dem Kerning angewendet wird. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
/* kerning: auto|normal|none */
.container1 * {
  font-kerning: normal;
}
.inactive.container1 * {
  font-kerning: none;
}

/* 'kern' 1|0 (on or off) */
.container2 * {
  font-feature-settings: "kern" 1;
}
.inactive.container2 * {
  font-feature-settings: "kern" 0;
}

Alternates

Zugehörige CSS-Eigenschaft: font-variant-alternates

Schriften können eine Reihe von verschiedenen Alternativen für verschiedene Glyphen bereitstellen, wie unterschiedliche Stile des Kleinbuchstabens 'a' oder mehr oder weniger aufwendige Schnörkel in einer Skriptschrift. Diese Eigenschaft kann ein ganzes Satz von Alternativen aktivieren oder nur eine spezifische, abhängig von den angegebenen Werten. Das folgende Beispiel zeigt mehrere verschiedene Aspekte der Arbeit mit alternativen Zeichen. Schriften mit alternativen Glyphen können sie allgemein oder individuell in separaten stilistischen Sets oder sogar für einzelne Zeichen verfügbar machen. In diesem Beispiel sehen Sie zwei verschiedene Schriftarten und die Einführung der @font-feature-values at-rule. Diese wird verwendet, um Verknüpfungen oder benannte Optionen zu definieren, die pro Schriftfamilie definiert werden können. So können Sie eine benannte Option erstellen, die nur auf eine einzelne Schrift angewendet wird, oder eine, die geteilt wird und allgemeiner angewendet werden kann. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
@font-feature-values "Plex Serif" {
  @styleset {
    alt-a: 1;
    alt-g: 2;
  }
  @stylistic {
    alternates: 1;
  }
}

@font-feature-values "Dancing Script" {
  @stylistic {
    alternates: 1;
  }
}

.container1 * {
  font-variant-alternates: styleset(alt-a);
}
.container1 .script {
  font-variant-alternates: stylistic(alternates);
}
.inactive.container1 * {
  font-variant-alternates: normal;
}

.container2 * {
  font-feature-settings: "ss01";
}
.container2 .script {
  font-feature-settings: "salt";
}
.inactive.container2 * {
  font-feature-settings:
    "ss01" 0,
    "salt" 0;
}

In diesem Fall zeigt @stylistic(alternates) alle alternativen Zeichen für beide Schriften. Wenn Sie dies nur auf das Wort 'My' anwenden, ändert sich die Darstellung des 'M', und die Anwendung von @styleset(alt-a) ändert nur das Kleinbuchstaben 'a'.

Versuchen Sie, die Zeile

css
font-variant-alternates: styleset(alt-a);

in

css
font-variant-alternates: styleset(alt-g);

zu ändern, und beachten Sie, dass das Kleinbuchstaben 'a' zu seiner regulären Form zurückkehrt und die Kleinbuchstaben 'g's sich stattdessen ändern.

Mehr über Alternates

Ligatures

Zugehörige CSS-Eigenschaft: font-variant-ligatures

Ligaturen sind Glyphe, die zwei oder mehr getrennte Glyphe ersetzen, um sie flüssiger darzustellen (aus Abstand oder ästhetischer Sicht). Einige der gebräuchlichsten sind Buchstaben wie 'fi', 'fl' oder 'ffl' – aber es gibt viele andere Möglichkeiten. Es gibt die häufigsten (als häufige Ligaturen bezeichnet), und es gibt auch spezialisiertere Kategorien wie 'diskretionäre Ligaturen', 'historische Ligaturen' und 'kontextuelle Alternativen'. Obwohl diese letzten nicht technisch Ligaturen sind, sind sie im Allgemeinen ähnlich darin, dass sie bestimmte Buchstabenkombinationen ersetzen, wenn sie zusammen erscheinen.

Während sie häufiger in Skriptschriften vorkommen, werden sie im folgenden Beispiel verwendet, um Pfeile zu erstellen. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
.container1 * {
  font-variant-ligatures: common-ligatures discretionary-ligatures contextual;
}
.inactive.container1 * {
  font-variant-ligatures: none;
}

/* 'liga', 'dlig', 'hlig', 'calt' */
.container2 * {
  font-feature-settings: "dlig", "liga", "calt";
}
.inactive.container2 * {
  font-feature-settings:
    "dlig" 0,
    "liga" 0,
    "calt" 0;
}

Position

Zugehörige CSS-Eigenschaft: font-variant-position

Positionsvarianten werden verwendet, um typografische Hoch- und Tiefgestelltzeichen zu aktivieren. Diese sind so gestaltet, dass sie mit dem umgebenden Text arbeiten, ohne die Grundlinie oder den Zeilenabstand zu verändern. Dies ist besonders nützlich mit den <sub> oder <sup> Elementen. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
/* position: normal|sub|super */
.container1 .super {
  font-variant-position: super;
}
.container1 .sub {
  font-variant-position: sub;
}
.inactive.container1 * {
  font-variant-position: normal;
}

/* 'subs', 'sups' */
.container2 .super {
  font-feature-settings: "sups";
}
.container2 .sub {
  font-feature-settings: "subs";
}
.inactive.container2 * {
  font-feature-settings:
    "sups" 0,
    "subs" 0;
}

Capitals

Zugehörige CSS-Eigenschaft: font-variant-caps

Einer der häufigeren Anwendungsfälle für OpenType-Merkmale sind ordnungsgemäße Kapitälchen. Diese sind Großbuchstaben, die für eine bessere Anpassung zwischen Kleinbuchstaben dimensioniert sind und werden im Allgemeinen für Akronyme und Abkürzungen verwendet. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
/* position: normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps */
.container1 .small-caps {
  font-variant-caps: small-caps;
}
.container1 .all-small-caps {
  font-variant-caps: all-small-caps;
}
.inactive.container1 * {
  font-variant-caps: normal;
}

/* 'smcp', 'c2sc' */
.container2 .small-caps {
  font-feature-settings: "smcp" 1;
}
.container2 .all-small-caps {
  font-feature-settings:
    "c2sc" 1,
    "smcp" 1;
}
.inactive.container2 * {
  font-feature-settings:
    "smcp" 0,
    "c2sc" 0;
}

Numerals

Zugehörige CSS-Eigenschaft: font-variant-numeric

Es gibt verschiedene Zahlstile, die üblicherweise in Schriften enthalten sind:

  • 'Lining' Zahlen sind alle gleich hoch und auf derselben Grundlinie.
  • 'Oldstyle' Zahlen sind unterschiedlich hoch und sind so gestaltet, dass sie die Erscheinung von Auf- und Abstrichen wie andere Kleinbuchstaben haben. Diese sind dazu gedacht, in den Text eingefügt zu werden, damit die Zahlen mit den umgebenden Glyphen optisch ähnlich wie kleine Buchstaben verschmelzen.

Es gibt auch den Begriff des Abstands. Proportionaler Abstand ist die normale Einstellung, während tabellarischer Abstand die Zahlen gleichmäßig ausrichtet, unabhängig von der Zeichenbreite, was es angemessener macht, Tabellen mit Zahlen in Finanztabellen auszurichten.

Es gibt zwei Arten von Brüchen, die durch diese Eigenschaft unterstützt werden:

  • Diagonal geschlitzte Brüche.
  • Vertikal gestapelte Brüche.

Ordinals werden ebenfalls unterstützt (wie '1st' oder '3rd'), ebenso wie eine durchgestrichene Null, wenn in der Schrift enthalten.

Lining und old-style figures

Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
.container1 .lining {
  font-variant-numeric: lining-nums;
}
.container1 .oldstyle {
  font-variant-numeric: oldstyle-nums;
}
.inactive.container1 * {
  font-variant-numeric: normal;
}

.container2 .lining {
  font-feature-settings: "lnum" 1;
}
.container2 .oldstyle {
  font-feature-settings: "onum" 1;
}
.inactive.container2 * {
  font-feature-settings:
    "lnum" 0,
    "onum" 0;
}

Brüche, Ordinals und durchgestrichene Null

Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
.container1 .diagonal-fractions {
  font-variant-numeric: diagonal-fractions;
}
.container1 .ordinal {
  font-variant-numeric: ordinal;
}
.container1 .zero {
  font-variant-numeric: slashed-zero;
}
.inactive.container1 * {
  font-variant-numeric: normal;
}

.container2 .diagonal-fractions {
  font-feature-settings: "frac" 1;
}
.container2 .ordinal {
  font-feature-settings: "ordn" 1;
}
.container2 .zero {
  font-feature-settings: "zero" 1;
}
.inactive.container2 * {
  font-feature-settings:
    "frac" 0,
    "ordn" 0,
    "zero" 0;
}

Ostasiatisch

Zugehörige CSS-Eigenschaft: font-variant-east-asian

Dies ermöglicht den Zugriff auf verschiedene alternative Formen von Glyphen innerhalb einer Schrift. Das folgende Beispiel zeigt eine Zeichenfolge normaler Glyphen. Deaktivieren Sie das Kontrollkästchen unten und Sie sehen Zeichen mit nur den jis78 Glyphen. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
.container1 * {
  font-variant-east-asian: normal;
}
.inactive.container1 * {
  font-variant-east-asian: jis78;
}

.container2 * {
  font-feature-settings: "jp78" 0;
}
.inactive.container2 * {
  font-feature-settings: "jp78";
}

Hinweis: Diese Glyphen wurden aus einem Schriftmuster kopiert und sind nicht als Prosa gedacht.

Font variant shorthand

Die font-variant Eigenschaft ist die Kurzzeichensyntax zur Definition aller oben genannten. Die Einstellung eines Wertes von normal setzt alle Eigenschaften auf ihren Anfangswert zurück. Die Einstellung eines Wertes von none setzt font-variant-ligatures auf none und alle anderen Eigenschaften auf ihren Anfangswert. Das bedeutet, dass wenn Kerning standardmäßig eingeschaltet ist, es immer noch eingeschaltet ist, selbst wenn ein Wert von none hier angegeben wird. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:

css
.container1 * {
  font-variant: common-ligatures discretionary-ligatures contextual
    diagonal-fractions;
}
.inactive.container1 * {
  font-variant: none;
}

.container2 * {
  font-feature-settings: "dlig", "liga", "calt", "frac";
}
.inactive.container2 * {
  font-feature-settings:
    "dlig" 0,
    "liga" 0,
    "calt" 0,
    "frac" 0;
}

Font feature settings

font-feature-settings ist die 'Low-Level-Syntax', die expliziten Zugriff auf jedes benannte verfügbare OpenType-Merkmal ermöglicht. Dies bietet viel Kontrolle, hat aber einige Nachteile in Bezug auf die Vererbung und – wie oben erwähnt – wenn Sie eine Einstellung ändern möchten, müssen Sie die gesamte Zeichenfolge neu deklarieren (es sei denn, Sie verwenden CSS-Benutzervariablen, um die Werte festzulegen). Aus diesem Grund ist es am besten, die oben gezeigten Standard-Eigenschaften wann immer möglich zu verwenden.

Es gibt eine Vielzahl möglicher Merkmale. Sie können oben Beispiele für einige von ihnen sehen, und es gibt mehrere Ressourcen, um mehr davon zu finden.

Die allgemeine Syntax sieht folgendermaßen aus:

css
.small-caps {
  font-feature-settings: "smcp", "c2sc";
}

Laut der Spezifikation können Sie entweder nur den 4-Zeichen-Merkmalscode angeben oder eine 1 nach dem Code (zum Aktivieren dieses Merkmals) oder eine 0 (Null) zum Deaktivieren angeben. Dies ist hilfreich, wenn Sie ein Merkmal wie Ligaturen standardmäßig aktiviert haben, aber diese deaktivieren möchten, etwa so:

css
.no-ligatures {
  font-feature-settings:
    "liga" 0,
    "dlig" 0;
}

Weitere Informationen zu font-feature-settings-Codes

Verwendung der CSS-Merkmalserkennung für die Implementierung

Da nicht alle Eigenschaften gleichmäßig implementiert sind, ist es eine gute Praxis, Ihr CSS mit der Merkmalserkennung so einzurichten, dass die richtigen Eigenschaften genutzt werden, wobei font-feature-settings als Fallback dient.

Ein Beispiel: Kapitälchen können auf mehrere Arten gesetzt werden, aber wenn Sie sicherstellen möchten, dass unabhängig von der zugrunde liegenden Groß- und Kleinschreibung alles in Kapitälchen endet, erfordert dies 2 Einstellungen mit font-feature-settings gegenüber einem einzigen Eigenschaftswert mit font-variant-caps.

css
.small-caps {
  font-feature-settings: "smcp", "c2sc";
}

@supports (font-variant-caps: all-small-caps) {
  .small-caps {
    font-feature-settings: normal;
    font-variant-caps: all-small-caps;
  }
}

Siehe auch

Demos von CSS OpenType-Merkmalen in CSS

Webfont-Analysetools

W3C-Spezifikationen

Andere Ressourcen