Ligatura je grafické spojení dvou nebo více znaků do jednoho typografického znaku pro zlepšení čitelnosti a estetiky textu. Klasické příklady zahrnují páry fi, fl, ff, ffi — kde vyčnívající prvek písmene f splývá se sousedním znakem, čímž se předchází vizuálnímu konfliktu. V moderním mobilním a webovém vývoji jsou ligatury spravovány na úrovni písma pomocí funkcí OpenType a jsou podporovány na iOS, Android a v prohlížečích. Podle MDN Web Docs umožňuje vlastnost CSS font-variant-ligatures vývojáři zapínat a vypínat různé typy ligatur: standardní, discretionary (dekorativní) a kontextové.
Hlavní body
Ligatura je typografická technika, při které jsou dva nebo více znaků nahrazeny jedním speciálně navrženým znakem. Hlavním cílem ligatury je odstranit vizuální konflikty mezi sousedními znaky a zlepšit vnímání textu. V páru fi například horní výčnělek písmene f naráží na tečku písmene i — ligatura je spojuje do jednoho elegantního symbolu.
Ligatury se dělí na povinné (standardní) a volitelné (dekorativní). Standardní ligatury jsou páry, které se vyskytují ve většině písem: fi, fl, ff, ffi, ffl. Jsou považovány za nezbytné pro kvalitní typografii a jsou ve výchozím nastavení v písmu zapnuty. Podle specifikace OpenType jsou standardní ligatury kódovány značkou 'liga' a měly by být zapnuty v každém profesionálním písmu.
Vizuální efekt: bez ligatury vypadá pár fi jako dva oddělené znaky s nežádoucím dotykem. S ligaturou — jako jeden harmonický symbol. Rozdíl je patrný zejména ve velkých velikostech (nadpisy, loga) a v textu s velkým množstvím opakujících se párů (například v němčině s häufigen Buchstabenkombinationen).
Písma OpenType podporují několik typů ligatur, každý s vlastní značkou a účelem. Standardní (značka 'liga') — povinné ligatury ve výchozím nastavení zapnuté v písmu. Zlepšují čitelnost a neměly by být vypínány bez závažného důvodu. Obsahují páry fi, fl, ff, ffi, ffl a další specifické pro dané písmo.
Discretionary ligatury (značka 'dlig') — dekorativní ligatury, které se zapínají volitelně podle uvážení designéra. Nejsou vyžadovány pro čitelnost a používají se pro stylizaci textu: ct, st, sp, Th, Qu a další. Discretionary ligatury se často vyskytují v písmech s historickým nebo kaligrafickým charakterem — například v Garamond nebo Adobe Caslon. Varování: nadměrné množství discretionary ligatur zhoršuje čitelnost, zejména pro uživatele s dyslexií.
Kontextové ligatury (značka 'clig') — ligatury, které závisí na okolí znaku. Používají se pouze za určitých podmínek: pokud je znak na začátku nebo na konci slova, po určitém interpunkčním znaménku atd. Kontextové ligatury jsou pokročilou funkcí OpenType, kterou nepodporují všechna písma. Historické ligatury (značka 'hlig') — zastaralé ligatury napodobující styl starých tištěných knih (long s, &). Používají se zřídka, pouze v historických nebo stylizovaných textech.
| Typ ligatury | Značka OpenType | Příklady | Výchozí |
|---|---|---|---|
| Standardní | liga | fi, fl, ff, ffi | Zapnuto |
| Discretionary | dlig | ct, st, sp, Th | Vypnuto |
| Kontextové | clig | Závisí na pozici | Zapnuto |
| Historické | hlig | long s, ct (hist.) | Vypnuto |
Vzácné typy: existují také ligatury pro matematickou sazbu (značka 'dlig' pro matematické symboly) a ligatury iniciál (drop caps) — ale nepoužívají se v typografii rozhraní a jsou podporovány pouze specializovanými písmy.
Ligatury se objevily dávno před digitální typografií — již v éře kovové sazby v 15. století. Tiskař Johannes Gutenberg používal ligatury k úspoře místa v řádcích své 42řádkové Bible. Každé písmeno bylo fyzickým kovovým blokem a spojení dvou znaků do jednoho písmene šetřilo olovo a zjednodušovalo sazbu. Standardní ligatury fi, fl, ffi, ffl jsou dědictvím té doby.
Ve fotosazbě (20. století) ligatury ztratily svou praktickou funkci, ale zůstaly jako estetický prvek kvalitní typografie. Návrháři písem nadále začleňovali ligatury do svých typů písma, protože se staly znakem profesionality a pozornosti k detailům. V éře digitálních písem (PostScript, TrueType) byly ligatury implementovány jako samostatné glyfy s programovým nahrazováním.
OpenType (1996) byl revolucí: zavedl mechanismus GSUB (Glyph Substitution Table), který automaticky nahrazuje sekvenci znaků ligaturou bez zásahu uživatele. GSUB podporuje kontextové nahrazování, podmínky a záložní varianty. To umožnilo písmům mít stovky ligatur, které se zapínají/vypínají pomocí značek. Moderní písma — SF Pro, Roboto, Inter — podporují ligatury OpenType na všech platformách: iOS, Android, macOS, Windows, web.
Na iOS lze ligatury spravovat pomocí UIFontDescriptor s použitím atributu featureSettings. Tento atribut přijímá pole slovníků, z nichž každý popisuje jednu funkci OpenType. Správa ligatur pomocí deskriptoru je jediný způsob, jak ovládat jednotlivé typy ligatur, aniž by byly ovlivněny jiné funkce OpenType písma.
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// Povolit discretionary ligatury
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString také podporuje atribut ligature: NSNumber. Hodnota 0 — vypnout všechny ligatury, 1 — zapnout standardní (výchozí), 2 — zapnout všechny (včetně discretionary). Atribut ligature v NSAttributedString však neposkytuje jemnou kontrolu nad typy ligatur — pouze globální zapnutí/vypnutí. Pro selektivní správu použijte UIFontDescriptor s featureSettings.
SwiftUI neposkytuje přímý modifikátor pro ligatury. Pro správu ligatur ve SwiftUI vytvořte UIFont s požadovanými nastaveními pomocí UIFontDescriptor a použijte jej přes Font(descriptor:size:). Alternativně — použijte AttributedString (iOS 15+) s atributem .ligature pro NSMutableAttributedString v zobrazeních AppKit/UIKit.
// SwiftUI s vlastními ligaturami přes AttributedString
var attributedText: AttributedString {
var text = AttributedString(
"Effective typography with ligatures"
)
// Povolit všechny ligatury pro celý text
text.ligature = .all
return text
}
var body: some View {
Text(attributedText)
}
Na webu jsou ligatury spravovány pomocí CSS vlastnosti font-variant-ligatures, která přijímá klíčová slova: common-ligatures (standardní zapnuto), no-common-ligatures (standardní vypnuto), discretionary-ligatures, no-discretionary-ligatures, contextual, no-contextual. Vlastnost je podporována všemi moderními prohlížeči od roku 2015. Ve výchozím nastavení prohlížeče zapínají standardní a kontextové ligatury.
/* 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 nemá přímé API pro správu ligatur. V Androidu jsou ligatury spravovány na úrovni písma a vykreslovacího enginu Minikin (Android 10+). Pokud písmo obsahuje tabulku OpenType GSUB, ligatury se aplikují automaticky. Pro vypnutí ligatur v Androidu se používají vlastní Typeface vytvořené pomocí Typeface.Builder nebo předzpracování textu (nahrazení znaků před zobrazením). Omezení: na Androidu nižším než 10 mohou ligatury s některými TTF písmy fungovat nesprávně.
Nízkodrovňová kontrola: na všech platformách lze použít CSS @font-face s parametrem font-feature-settings pro funkce OpenType. Tato metoda poskytuje přístup k libovolným značkám OpenType, včetně ligatur. Příklad: font-feature-settings: 'liga' 1, 'dlig' 1. Nicméně font-feature-settings je syntaxe nízké úrovně a MDN doporučuje používat font-variant-ligatures jako alternativu vyšší úrovně.
Zvláštní třídou ligatur jsou programátorské ligatury, které spojují operátory a symboly kódu do čitelnějších znaků. Programátorská písma jako Fira Code, JetBrains Mono, Cascadia Code obsahují discretionary ligatury pro běžné operátory: != (stává se ≠), >= (stává se ≥), -> (stává se šipka), => (stává se tlustá šipka), === (stává se trojité rovnítko).
Programátorské ligatury jsou kontroverzním tématem v komunitě vývojářů. Zastánci tvrdí, že ligatury urychlují čtení kódu, protože operátory jsou vnímány jako jednotné koncepty. Výzkum (Kera et al., PLATEAU 2020) ukázal, že ligatury neovlivňují rychlost čtení kódu, ale subjektivně se líbí 67 % vývojářů. Odpůrci ligatur poznamenávají, že zkreslují kód: symbol != se v editoru zobrazuje jako ≠, ale v textovém souboru je uložen jako dva znaky, což může být při spolupráci matoucí.
Technická implementace: programátorské ligatury jsou discretionary ligatury OpenType (značka 'dlig'). Jsou ve výchozím nastavení vypnuty a zapínají se v editoru kódu pomocí nastavení písma. Vývojáři používající taková písma musí nakonfigurovat editor tak, aby zapínal discretionary ligatury. V terminálu (iTerm2, Windows Terminal) jsou ligatury také podporovány prostřednictvím nastavení písma. Kompatibilita: ne všechny editory a terminály podporují ligatury OpenType. Před výběrem písma zkontrolujte kompatibilitu s vaším nástrojem.
// Příklad: operátorové ligatury v JetBrains Mono
val isEqual = a != b // != vykresleno jako ≠
val arrow = x -> x + 1 // -> vykresleno jako →
val range = 1 .. 10 // .. vykresleno jako rozsah
Populární písma s programátorskými ligaturami: Fira Code (první masové písmo s ligaturami, 2015), JetBrains Mono (optimalizováno pro čtení kódu, 2020), Cascadia Code (od Microsoftu, 2019), Iosevka (konfigurovatelné písmo s modulárním systémem ligatur). Každé písmo má svou vlastní sadu ligatur — od 50 do 150+ náhrad. Doporučení: začněte s Fira Code nebo JetBrains Mono — mají nejlepší podporu v editorech a IDE.
Často kladené otázky
Nastavte atribut ligature = 0 v NSAttributedString nebo použijte UIFontDescriptor s kCommonLigaturesOffSelector. Ve SwiftUI — vytvořte AttributedString s .ligature = .disabled.
Ligatura nahrazuje dva znaky jedním novým znakem, čímž mění tvar. Kerning upravuje vzdálenost mezi znaky, aniž by měnil jejich tvar. Ligatura je grafické spojení, kerning je prostorová korekce.
Ano, od Android 10 (API 29). Vykreslování Minikin plně podporuje tabulky OpenType GSUB. Na starších verzích závisí podpora na výrobci zařízení a verzi písmového enginu.
Pro hlavní text postačí standardní ligatury (fi, fl, ff) — zlepšují čitelnost a jsou pro uživatele neviditelné. Discretionary ligatury používejte pouze v nadpisech nebo dekorativním textu, protože snižují čitelnost dlouhých textů.
Editor musí podporovat značku OpenType 'dlig' a umět zobrazovat discretionary ligatury. VS Code, IntelliJ IDEA, Sublime Text podporují. Staré terminály a editory (nano, vim bez GUI) — ne. Zkontrolujte nastavení editoru: zapněte font-ligatures.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také