OpenType-Schriftfunktionen
Schriftfunktionen oder Varianten beziehen sich auf verschiedene Glyphen oder Zeichenstile, die in einer OpenType-Schriftart enthalten sind. Dazu gehören Dinge wie Ligaturen (spezielle Glyphen, die Zeichen wie 'fi' oder 'ffl' kombinieren), Kerning (Anpassungen des Abstands zwischen bestimmten Buchstabenpaaren), Brüche, Zahlstile und einige andere. Diese werden alle als OpenType-Funktionen bezeichnet und können im Web über spezifische Eigenschaften und Low-Level-Kontrolleigenschaften verwendet werden — font-feature-settings. Dieser Artikel bietet Ihnen alles, was Sie über die Verwendung von OpenType-Schriftfunktionen in CSS wissen müssen.
Einige Schriftarten haben eine oder mehrere dieser Funktionen standardmäßig aktiviert (Kerning und Standardligaturen sind häufige Beispiele), während andere dem Designer oder Entwickler überlassen werden, sie in bestimmten Szenarien zu aktivieren.
Neben breiten Funktionssets wie Ligaturen oder proportionalen Zahlen (Zahlen, die gleichmäßig ausgerichtet sind, im Gegensatz zu 'oldstyle', die mehr wie Kleinbuchstaben aussehen) gibt es auch sehr spezifische wie stilistische Sets (die mehrere spezifische Varianten von Glyphen enthalten könnten, die zusammen verwendet werden sollen), Alternativen (die eine oder mehrere Varianten des Buchstabens 'a' sein 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, sodass sie über die eher stilistische Vorliebe der meisten anderen OpenType-Funktionen hinausgehen.
Warnung:
Es gibt viele CSS-Attribute, die definiert sind, um Schriftfunktionen zu nutzen, aber leider sind viele nicht vollständig implementiert. Sie sind alle hier definiert und gezeigt, aber viele werden nur mit der Low-Level-Eigenschaft font-feature-settings funktionieren. Es ist möglich, CSS so zu schreiben, dass es in beiden Richtungen funktioniert, aber das kann lästig werden. Das Problem bei der Verwendung von font-feature-settings für alles ist, dass Sie jedes Mal, wenn Sie eine der einzelnen Funktionen ändern möchten, den gesamten String neu definieren müssen (ähnlich wie bei der Manipulation von variablen Schriftarten mit font-variation-settings).
Verfügbarkeit von Funktionen in Schriftarten entdecken
Dies ist manchmal die schwierigste Herausforderung, wenn Sie keine Dokumentation zu den Schriftarten haben (viele Schriftgestalter und Schriftgießereien bieten aus diesem Grund Musterseiten und CSS an). Aber es gibt einige Websites, die es einfacher machen, dies herauszufinden. Sie können wakamaifondue.com besuchen, Ihre Schriftartdatei auf den Kreis ziehen, wo es angewiesen wird, und in wenigen Augenblicken erhalten Sie einen vollständigen Bericht über alle Fähigkeiten und Merkmale Ihrer Schriftart. Axis-praxis.org bietet ebenfalls eine ähnliche Möglichkeit, mit der Fähigkeit, auf die Funktionen zu klicken, um sie in einem bestimmten Textblock ein- oder auszuschalten.
Warum sollten Sie sie verwenden?
Angesichts der Tatsache, dass diese Funktionen etwas Arbeit erfordern, um sie zu entdecken und zu verwenden, mag es gerecht erscheinen zu fragen, warum man sich die Mühe machen sollte, sie zu verwenden. Die Antwort liegt in den spezifischen Funktionen, die eine Website nützlicher, lesbarer und polierter machen:
- Ligaturen wie 'ff' oder 'fi' machen den Buchstabenabstand und das Lesen gleichmäßiger und fließender.
- Brüche können Heimwerker- und Rezeptseiten viel einfacher lesbar und verständlich machen.
- Zahlen innerhalb von Textabsätzen, die als 'oldstyle' gesetzt sind, fügen sich komfortabler zwischen Kleinbuchstaben ein, und ebenso machen es 'tabellarische Zahlen' einfacher, sie auszurichten, wenn man eine Liste von Kosten in einer Tabelle erstellt. 'Lining'-Zahlen hingegen passen sich auf ihrer eigenen oder vor groß geschriebenen Wörtern gleichmäßiger ein.
Während keine dieser Funktionen allein eine Website aufgrund ihrer Abwesenheit unbrauchbar machen wird, kann jede von ihnen eine Website einfacher zu verwenden und, durch ihre Liebe zum Detail, einprägsamer machen.
OpenType-Funktionen sind wie geheime Fächer in Schriften. Wenn Sie sie freischalten, finden Sie Möglichkeiten, Schriften subtil und dramatisch anders aussehen und sich verhalten zu lassen. Nicht alle OpenType-Funktionen sollten jederzeit verwendet werden, aber einige Funktionen 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 bei font-variant-east-asian — in denen OpenType-Funktionen direkt mit der Verwendung verschiedener Formen bestimmter Glyphen verbunden sind, was die Bedeutung und Lesbarkeit beeinflussen kann. In solchen Fällen geht es um mehr als nur eine Nettigkeit, sondern vielmehr um einen integralen Bestandteil des Inhalts selbst.
Die Schriftfunktionen
Es gibt eine Reihe verschiedener Funktionen zu beachten. Sie sind hier gruppiert und erklärt gemäß den Hauptattributen und Optionen, die in den W3C-Spezifikationen behandelt werden.
Hinweis: Die untenstehenden Beispiele zeigen die Eigenschaften und einige Beispielkombinationen, zusammen mit den Low-Level-Syntaxäquivalenten. Sie stimmen möglicherweise nicht genau überein, aufgrund von Konsistenzproblemen bei der Browserimplementierung, aber in vielen Fällen wird das erste Beispiel dem zweiten entsprechen. Die gezeigten Schriftarten sind Playfair Display, Source Serif Pro, IBM Plex Serif, Dancing Script und Kokoro (alle verfügbar und kostenlos zu nutzen, die meisten sind auf Google Fonts und anderen Diensten).
Kerning
Zugehörige CSS-Eigenschaft: font-kerning
Dies bezieht sich auf den Abstand zwischen bestimmten Glyphpaaren. Dies ist in der Regel standardmäßig aktiviert (wie von der OpenType-Spezifikation empfohlen). Es sollte beachtet werden, dass, wenn letter-spacing ebenfalls für Ihren Text eingestellt ist, dies nach dem Kerning angewendet wird.
Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:
/* 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;
}
Alternaten
Zugehörige CSS-Eigenschaft: font-variant-alternates
Schriften können eine Reihe von verschiedenen Alternativen für verschiedene Glyphen liefern, wie z.B. verschiedene Stile von Kleinbuchstaben 'a' oder mehr oder weniger aufwendige Schwünge in einer Schriftart. Diese Eigenschaft kann ein komplettes Set von Alternaten aktivieren oder nur eine spezifische, je nach den gelieferten Werten. Das Beispiel unten zeigt verschiedene Aspekte der Arbeit mit alternativen Zeichen. Schriften mit alternativen Glyphen können diese allgemein oder individuell in separaten stilistischen Sets oder sogar individuellen Zeichen verfügbar machen. In diesem Beispiel können Sie zwei verschiedene Schriftarten sehen und die Einführung der Direktive @font-feature-values. Diese wird verwendet, um Abkürzungen oder benannte Optionen zu definieren, die pro Schriftfamilie definiert werden können. Auf diese Weise können Sie eine benannte Option erstellen, die nur für eine einzelne Schriftart gilt oder eine, die geteilt und allgemeiner angewendet werden kann. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:
@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 Schriftarten. Die Anwendung nur auf das Wort 'My' verändert die Darstellung des 'M', und die Anwendung von @styleset(alt-a) ändert nur das Kleinbuchstaben-'a'.
Versuchen Sie, die Zeile
font-variant-alternates: styleset(alt-a);
in
font-variant-alternates: styleset(alt-g);
zu ändern und bemerken Sie, dass das Kleinbuchstaben-'a' zu seiner regulären Form zurückkehrt und die Kleinbuchstaben-'g's sich stattdessen ändern.
Ligaturen
Zugehörige CSS-Eigenschaft: font-variant-ligatures
Ligaturen sind Glyphen, die zwei oder mehr getrennte Glyphen ersetzen, um sie glatter darzustellen (aus einer Abstands- oder ästhetischen Perspektive). Einige der häufigsten sind Buchstaben wie 'fi', 'fl' oder 'ffl' — aber es gibt viele andere Möglichkeiten. Es gibt die häufigsten (als allgemeine Ligaturen bezeichnet), und es gibt auch speziellere Kategorien wie 'diskretionäre Ligaturen', 'historische Ligaturen' und 'kontextuelle Alternativen'. Während diese letzten nicht technisch Ligaturen sind, sind sie im Allgemeinen ähnlich, da sie spezifische Buchstabenkombinationen ersetzen, wenn sie zusammen erscheinen.
Während sie häufiger in Skriptschriftarten 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:
.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 Tiefstellungen zu ermöglichen. Diese sind so gestaltet, dass sie mit dem umgebenden Text arbeiten, ohne die Basislinie 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:
/* 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;
}
Großbuchstaben
Zugehörige CSS-Eigenschaft: font-variant-caps
Einer der häufigeren Anwendungsfälle für OpenType-Funktionen sind richtige Kapitälchen. Diese sind in der Größe angepasst, um besser zwischen Kleinbuchstaben zu passen 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:
/* 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;
}
Ziffern
Zugehörige CSS-Eigenschaft: font-variant-numeric
Es gibt mehrere verschiedene Stile von Ziffern, die üblicherweise in Schriftarten enthalten sind:
- 'Lining'-Ziffern haben alle dieselbe Höhe und sind auf derselben Basislinie.
- 'Oldstyle'-Ziffern sind gemischter Höhe und so gestaltet, dass sie das Erscheinungsbild von Ober- und Unterlängen haben, ähnlich wie andere Kleinbuchstaben. Diese sind dafür gedacht, inline mit einem Text zu verwendet werden, damit sich die Ziffern visuell mit den umgebenden Glyphen in ähnlicher Weise wie Kapitälchen vermischen.
Es gibt auch das Konzept der Abstände. Proportionale Abstände sind die normale Einstellung, während tabellarische Abstände die Ziffern gleichmäßig ausrichten, unabhängig von der Zeichenbreite, was es mehr geeignet macht für das Ausrichten von Zahlenreihen in finanziellen Tabellen.
Es gibt zwei Arten von Brüchen, die durch diese Eigenschaft unterstützt werden:
- Diagonal durchgestrichene Brüche.
- Vertikal gestapelte Brüche.
Ordnungszahlen werden ebenfalls unterstützt (wie '1st' oder '3rd'), ebenso wie eine durchgestrichene Null, falls in der Schriftart vorhanden.
Lining- und Oldstyle-Ziffern
Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:
.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, Ordnungszahlen und durchgestrichene Null
Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:
.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 Schriftart. Im Beispiel unten wird eine Zeichenfolge von normalen Glyphen angezeigt. Wenn Sie das Kästchen unten deaktivieren, sehen Sie Zeichen nur mit den jis78 Glyphen. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:
.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 einer Schriftprobe kopiert und sind nicht als Prosa gedacht.
Schriftvarianten-Kurzform
Die Eigenschaft font-variant ist die Kurznamen-Syntax zur Definition aller oben genannten. Wenn Sie den Wert normal einstellen, werden alle Eigenschaften auf ihre Standardwerte zurückgesetzt. Wenn Sie den Wert none einstellen, wird font-variant-ligatures auf none gesetzt und alle anderen Eigenschaften auf ihre Standardwerte zurückgesetzt. Das bedeutet, dass, wenn Kerning standardmäßig aktiviert ist, es auch dann immer noch aktiviert bleibt, wenn hier ein Wert von none angegeben wird. Klicken Sie auf "Play" in den Codeblöcken unten, um das Beispiel im MDN Playground zu bearbeiten:
.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;
}
Schriftmerkmaleinstellungen
font-feature-settings ist die 'Low-Level-Syntax', die expliziten Zugriff auf jede benannte verfügbare OpenType-Funktion ermöglicht. Dies gibt viel Kontrolle, hat jedoch einige Nachteile hinsichtlich der Auswirkung auf die Vererbung und — wie oben erwähnt — wenn Sie eine Einstellung ändern möchten, müssen Sie den gesamten String neu deklarieren (es sei denn, Sie verwenden CSS-Benutzerdefinierte Eigenschaften, um die Werte festzulegen). Aus diesem Grund ist es am besten, wo immer möglich die oben gezeigten Standardeigenschaften zu verwenden.
Es gibt eine große Anzahl möglicher Funktionen. Sie können Beispiele für eine Reihe davon oben sehen, und es gibt mehrere Ressourcen, um mehr davon zu finden.
Die allgemeine Syntax sieht so aus:
.small-caps {
font-feature-settings: "smcp", "c2sc";
}
Laut der Spezifikation können Sie entweder nur den 4-Zeichen-Funktionscode angeben oder eine 1 nach dem Code angeben (um diese Funktion zu aktivieren) oder eine 0 (null), um sie zu deaktivieren. Dies ist hilfreich, wenn Sie eine Funktion wie Ligaturen standardmäßig aktiviert haben, sie jedoch ausschalten möchten, wie folgt:
.no-ligatures {
font-feature-settings:
"liga" 0,
"dlig" 0;
}
Mehr Informationen zu font-feature-settings Codes
- 'The Complete CSS Demo for OpenType Features' (kann nicht für die Wahrhaftigkeit des Namens bürgen, aber es ist ziemlich umfangreich)
- Eine Liste von OpenType-Funktionen auf Wikipedia
Verwendung der CSS Funktionserkennung für Implementierungen
Da nicht alle Eigenschaften einheitlich implementiert sind, ist es eine gute Praxis, Ihr CSS mit Funktionserkennung so einzurichten, dass Sie die richtigen Eigenschaften verwenden können, wobei font-feature-settings als Fallback dient.
Beispielsweise können Kapitälchen auf mehrere Arten eingestellt werden, aber wenn Sie sicherstellen möchten, dass Sie unabhängig von der zugrunde liegenden Großschreibung mit allem in Kapitälchen enden, erfordert dies 2 Einstellungen mit font-feature-settings im Gegensatz zu einem einzigen Eigenschaftswert mit font-variant-caps.
.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 OpenType-Funktionen in CSS
Tools zur Analyse von Webschriften
W3C-Spezifikationen
Andere Ressourcen
- Using OpenType features von Tim Brown, Head of Typography, Adobe
- Adobe's Syntax for OpenType features in CSS