Ligatur ist eine grafische Kombination von zwei oder mehr Zeichen zu einem einzigen typografischen Zeichen, um die Lesbarkeit und Ästhetik von Text zu verbessern. Klassische Beispiele sind die Paare fi, fl, ff, ffi — bei denen das hervorstehende Element des Buchstabens f mit dem benachbarten Zeichen verschmilzt und einen visuellen Konflikt verhindert. In der modernen mobilen und Webentwicklung werden Ligaturen auf Schriftartebene über OpenType-Funktionen gesteuert und auf iOS, Android und in Browsern unterstützt. Laut MDN Web Docs ermöglicht die CSS-Eigenschaft font-variant-ligatures dem Entwickler, verschiedene Arten von Ligaturen zu aktivieren und zu deaktivieren: Standard-, optionale (dekorative) und kontextbezogene.
Wichtigste Punkte
Ligatur ist eine typografische Technik, bei der zwei oder mehr Zeichen durch eine speziell entworfene einzelne Glyphe ersetzt werden. Der Hauptzweck einer Ligatur besteht darin, visuelle Konflikte zwischen benachbarten Zeichen zu beseitigen und die Textwahrnehmung zu verbessern. Im Paar fi beispielsweise stößt der obere Vorsprung des Buchstabens f mit dem Punkt des Buchstabens i zusammen — die Ligatur verschmilzt sie zu einem einzigen eleganten Symbol.
Ligaturen werden in obligatorische (Standard) und optionale (dekorative) unterteilt. Standardligaturen sind Paare, die in den meisten Schriftarten vorkommen: fi, fl, ff, ffi, ffl. Sie gelten als notwendig für eine hochwertige Typografie und sind standardmäßig in der Schriftart aktiviert. Gemäß der OpenType-Spezifikation werden Standardligaturen mit dem Tag ‘liga’ codiert und müssen in jeder professionellen Schriftart vorhanden sein.
Visueller Effekt: Ohne Ligatur sieht das Paar fi wie zwei separate Zeichen mit einer unerwünschten Kollision aus. Mit Ligatur wirkt es wie ein harmonisches Symbol. Der Unterschied ist besonders bei großen Schriftgrößen (Überschriften, Logos) und in Texten mit vielen wiederholten Paaren (z. B. im Deutschen bei häufigen Buchstabenkombinationen) auffällig.
OpenType-Schriftarten unterstützen mehrere Arten von Ligaturen, jede mit ihrem eigenen Tag und Zweck. Standard (Tag ‘liga’) sind obligatorische Ligaturen, die standardmäßig in einer Schriftart aktiviert sind. Sie verbessern die Lesbarkeit und sollten nicht ohne triftigen Grund deaktiviert werden. Sie umfassen die Paare fi, fl, ff, ffi, ffl und andere, die für die Schriftart spezifisch sind.
Optionale Ligaturen (Tag ‘dlig’) sind dekorative Ligaturen, die nach Ermessen des Designers optional aktiviert werden. Sie sind nicht für die Lesbarkeit erforderlich und werden zur Textgestaltung verwendet: ct, st, sp, Th, Qu und andere. Optionale Ligaturen finden sich häufig in Schriftarten mit historischem oder kalligrafischem Charakter — zum Beispiel in Garamond oder Adobe Caslon. Vorsicht: Ein Übermaß an optionalen Ligaturen beeinträchtigt die Lesbarkeit, insbesondere für Benutzer mit Legasthenie.
Kontextbezogene Ligaturen (Tag ‘clig’) sind Ligaturen, die vom umgebenden Kontext des Zeichens abhängen. Sie werden nur unter bestimmten Bedingungen angewendet: wenn das Zeichen am Anfang oder Ende eines Wortes steht, nach einem bestimmten Satzzeichen usw. Kontextbezogene Ligaturen sind eine erweiterte OpenType-Funktion, die nicht von allen Schriftarten unterstützt wird. Historische Ligaturen (Tag ‘hlig’) sind veraltete Ligaturen, die den Stil alter gedruckter Bücher nachahmen (langes s, &). Sie werden selten verwendet, nur in historischen oder stilisierten Texten.
| Ligaturtyp | OpenType-Tag | Beispiele | Standard |
|---|---|---|---|
| Standard | liga | fi, fl, ff, ffi | Aktiviert |
| Optional | dlig | ct, st, sp, Th | Deaktiviert |
| Kontextbezogen | clig | Abhängig von Position | Aktiviert |
| Historisch | hlig | langes s, ct (historisch) | Deaktiviert |
Seltene Typen: Es gibt auch Ligaturen für mathematischen Satz (Tag ‘dlig’ für mathematische Symbole) und Initialligaturen (Drop Caps), die jedoch in der Oberflächentypografie nicht verwendet werden und nur von speziellen Schriftarten unterstützt werden.
Ligaturen tauchten lange vor der digitalen Typografie auf — bereits in der Ära des Metallbleisatzes im 15. Jahrhundert. Der erste Drucker Johannes Gutenberg verwendete Ligaturen, um in den Zeilen seiner 42-zeiligen Bibel Platz zu sparen. Jeder Buchstabe war ein physischer Metallblock, und die Kombination zweier Zeichen in einem Stück sparte Blei und vereinfachte den Satz. Die Standardligaturen fi, fl, ffi, ffl sind ein Erbe dieser Ära.
Im Fotosatz (20. Jahrhundert) verloren Ligaturen ihre praktische Funktion, blieben aber als ästhetisches Element hochwertiger Typografie erhalten. Schriftdesigner nahmen weiterhin Ligaturen in ihre Schriften auf, da sie zu einem Zeichen von Professionalität und Liebe zum Detail wurden. Im Zeitalter digitaler Schriftarten (PostScript, TrueType) wurden Ligaturen als separate Glyphen mit programmgesteuertem Austausch implementiert.
OpenType (1996) war eine Revolution: Es führte den GSUB-Mechanismus (Glyph Substitution Table) ein, der automatisch eine Zeichenfolge ohne Benutzereingriff durch eine Ligatur ersetzt. GSUB unterstützt kontextbezogene Ersetzungen, Bedingungen und Fallback-Varianten. Dadurch konnten Schriftarten Hunderte von Ligaturen enthalten, die über Tags aktiviert/deaktiviert werden können. Moderne Schriftarten — SF Pro, Roboto, Inter — unterstützen OpenType-Ligaturen auf allen Plattformen: iOS, Android, macOS, Windows, Web.
Auf iOS können Ligaturen über UIFontDescriptor mit dem Attribut featureSettings gesteuert werden. Dieses Attribut akzeptiert ein Array von Wörterbüchern, die jeweils eine OpenType-Funktion beschreiben. Die Steuerung von Ligaturen über einen Deskriptor ist die einzige Möglichkeit, einzelne Ligaturtypen zu verwalten, ohne andere OpenType-Funktionen der Schriftart zu beeinträchtigen.
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// Optionale Ligaturen aktivieren
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString unterstützt ebenfalls das Attribut ligature: NSNumber. Der Wert 0 deaktiviert alle Ligaturen, 1 aktiviert Standard (Standard), 2 aktiviert alle (einschließlich optionaler). Das Attribut ligature in NSAttributedString bietet jedoch keine feine Kontrolle über Ligaturtypen — nur globale Aktivierung/Deaktivierung. Für eine selektive Steuerung verwenden Sie UIFontDescriptor mit featureSettings.
SwiftUI bietet keinen direkten Modifikator für Ligaturen. Um Ligaturen in SwiftUI zu steuern, erstellen Sie eine UIFont mit den gewünschten Einstellungen über UIFontDescriptor und verwenden Sie sie über Font(descriptor:size:). Alternativ verwenden Sie AttributedString (iOS 15+) mit dem Attribut .ligature für NSMutableAttributedString in AppKit/UIKit-Ansichten.
// SwiftUI mit benutzerdefinierten Ligaturen über AttributedString
var attributedText: AttributedString {
var text = AttributedString(
"Effective typography with ligatures"
)
// Alle Ligaturen für den gesamten Text aktivieren
text.ligature = .all
return text
}
var body: some View {
Text(attributedText)
}
Im Web werden Ligaturen über die CSS-Eigenschaft font-variant-ligatures gesteuert, die Schlüsselwörter akzeptiert: common-ligatures (Standard aktiviert), no-common-ligatures (Standard deaktiviert), discretionary-ligatures, no-discretionary-ligatures, contextual, no-contextual. Die Eigenschaft wird seit 2015 von allen modernen Browsern unterstützt. Standardmäßig aktivieren Browser Standard- und kontextbezogene Ligaturen.
/* Disable all ligatures for monospace */
code, pre {
font-variant-ligatures: none;
}
/* Enable discretionary ligatures for headings */
.title-fancy {
font-variant-ligatures:
common-ligatures
discretionary-ligatures
contextual;
}
Android bietet keine direkte API zur Steuerung von Ligaturen. Auf Android werden Ligaturen auf Schriftartebene und durch die Minikin-Rendering-Engine (Android 10+) gesteuert. Wenn die Schriftart eine OpenType-GSUB-Tabelle enthält, werden Ligaturen automatisch angewendet. Zum Deaktivieren von Ligaturen auf Android werden benutzerdefinierte Typefaces verwendet, die über Typeface.Builder erstellt wurden, oder die Textvorverarbeitung (Zeichenersetzung vor der Anzeige). Einschränkung: Auf Android vor Version 10 funktionieren Ligaturen möglicherweise nicht korrekt mit einigen TTF-Schriftarten.
Niedrigschwellige Steuerung: Auf allen Plattformen können Sie CSS @font-face mit dem Parameter font-feature-settings für OpenType-Funktionen verwenden. Diese Methode bietet Zugriff auf alle OpenType-Tags, einschließlich Ligaturen. Beispiel: font-feature-settings: ‘liga’ 1, ‘dlig’ 1. font-feature-settings ist jedoch eine niedrigschwellige Syntax, und MDN empfiehlt die Verwendung von font-variant-ligatures als höherwertige Alternative.
Eine besondere Klasse von Ligaturen — Programmierligaturen — kombinieren Operatoren und Codesymbole zu besser lesbaren Glyphen. Programmierschriftarten wie Fira Code, JetBrains Mono, Cascadia Code enthalten optionale Ligaturen für häufige Operatoren: != (wird zu ≠), >= (wird zu ≥), -> (wird zu Pfeil), => (wird zu dickem Pfeil), === (wird zu dreifachem Gleichheitszeichen).
Programmierligaturen sind ein kontroverses Thema in der Entwickler-Community. Befürworter argumentieren, dass Ligaturen das Lesen von Code beschleunigen, da Operatoren als einzelne Konzepte wahrgenommen werden. Eine Studie (Kera et al., PLATEAU 2020) zeigte, dass Ligaturen die Lesegeschwindigkeit von Code nicht beeinflussen, aber 67 % der Entwickler mögen sie subjektiv. Gegner von Ligaturen weisen darauf hin, dass sie Code verfälschen: Das Symbol != wird im Editor als ≠ angezeigt, in der Textdatei jedoch als zwei Zeichen gespeichert, was bei der Zusammenarbeit verwirrend sein kann.
Technische Implementierung: Programmierligaturen sind optionale OpenType-Ligaturen (Tag ‘dlig’). Sie sind standardmäßig deaktiviert und werden im Code-Editor über Schriftarteinstellungen aktiviert. Entwickler, die solche Schriftarten verwenden, müssen den Editor so konfigurieren, dass optionale Ligaturen aktiviert werden. In Terminals (iTerm2, Windows Terminal) werden Ligaturen ebenfalls über Schriftarteinstellungen unterstützt. Kompatibilität: Nicht alle Editoren und Terminals unterstützen OpenType-Ligaturen. Überprüfen Sie vor der Auswahl einer Schriftart die Kompatibilität mit Ihrer Toolchain.
// Beispiel: Operatorligaturen in JetBrains Mono
val isEqual = a != b // != wird als ≠ dargestellt
val arrow = x -> x + 1 // -> wird als → dargestellt
val range = 1 .. 10 // .. wird als Bereich dargestellt
Beliebte Schriftarten mit Programmierligaturen: Fira Code (die erste Massenschriftart mit Ligaturen, 2015), JetBrains Mono (optimiert für das Lesen von Code, 2020), Cascadia Code (von Microsoft, 2019), Iosevka (anpassbare Schriftart mit modularem Ligatursystem). Jede Schriftart hat ihren eigenen Ligatursatz — von 50 bis zu 150+ Ersetzungen. Empfehlung: Beginnen Sie mit Fira Code oder JetBrains Mono — sie haben die beste Unterstützung in Editoren und IDEs.
Häufig gestellte Fragen
Setzen Sie attribute ligature = 0 in NSAttributedString oder verwenden Sie UIFontDescriptor mit kCommonLigaturesOffSelector. Erstellen Sie in SwiftUI ein AttributedString mit .ligature = .disabled.
Ligatur ersetzt zwei Zeichen durch eine neue Glyphe und verändert deren Form. Kerning passt den Abstand zwischen Zeichen an, ohne deren Form zu verändern. Eine Ligatur ist eine grafische Verbindung, Kerning eine räumliche Anpassung.
Ja, ab Android 10 (API 29). Die Minikin-Rendering-Engine unterstützt OpenType-GSUB-Tabellen vollständig. Bei älteren Versionen hängt die Unterstützung vom Gerätehersteller und der Version der Schriftarten-Engine ab.
Für Fließtext reichen Standardligaturen (fi, fl, ff) aus — sie verbessern die Lesbarkeit und sind für den Benutzer unsichtbar. Verwenden Sie optionale Ligaturen nur in Überschriften oder dekorativem Text, da sie die Lesbarkeit langer Texte beeinträchtigen.
Der Editor muss den OpenType-Tag ‘dlig’ unterstützen und optionale Ligaturen rendern können. VS Code, IntelliJ IDEA, Sublime Text unterstützen sie. Ältere Terminals und Editoren (nano, vim ohne GUI) tun dies nicht. Überprüfen Sie die Editor-Einstellungen: Aktivieren Sie font-ligatures.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch