Ligatura v mobilním vývoji — základy a použití symbolických spojení

Autor: IT Sectr Publikováno: 2026-07-24 Doba čtení: 9 min

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 — spojení několika znaků do jednoho grafického prvku pro zlepšení čitelnosti
  • Standardní ligatury (fi, fl, ff) jsou ve výchozím nastavení zapnuty v profesionálních písmech
  • Discretionary ligatury (ct, st, sp) — dekorativní, zapínají se volitelně
  • Na iOS se spravují pomocí UIFontDescriptor s featureSettings pro funkce OpenType
  • V programátorských písmech ligatury spojují operátory: !=, >=, ->, =>

Co je ligatura v typografii

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).

Typy ligatur: standardní, discretionary, kontextové

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 ligaturyZnačka OpenTypePříkladyVýchozí
Standardníligafi, fl, ff, ffiZapnuto
Discretionarydligct, st, sp, ThVypnuto
KontextovécligZávisí na poziciZapnuto
Historickéhliglong 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.

Historie ligatur: od kovové sazby k digitálním písmům

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.

Implementace ligatur na iOS pomocí UIFontDescriptor

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.

swift
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.

swift
// 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)
}

Správa ligatur v CSS a na Android

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.

css
/* 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ě.

Ligatury v programátorských písmech

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.

kotlin
// 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

Jak vypnout ligatury na iOS?

Nastavte atribut ligature = 0 v NSAttributedString nebo použijte UIFontDescriptor s kCommonLigaturesOffSelector. Ve SwiftUI — vytvořte AttributedString s .ligature = .disabled.

Čím se ligatura liší od kerningu?

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.

Podporuje Android ligatury?

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.

Vyplatí se používat ligatury v rozhraní aplikace?

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ů.

Proč se ligatury v kódu nezobrazují ve všech editorech?

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í

  • Ligatura — spojení několika znaků do jednoho grafického prvku pro estetiku a čitelnost
  • Standardní ligatury (fi, fl, ff) jsou ve výchozím nastavení zapnuty v profesionálních písmech
  • Discretionary ligatury (ct, st, sp) — dekorativní, zapínají se přes CSS font-variant-ligatures
  • Na iOS se spravují pomocí UIFontDescriptor s featureSettings nebo atributem ligature
  • Na webu se spravují pomocí font-variant-ligatures nebo font-feature-settings ('liga', 'dlig')
  • Programátorské ligatury (Fira Code, JetBrains Mono) spojují operátory: !=, >=, ->
  • Pro typografii rozhraní používejte pouze standardní ligatury — discretionary snižují čitelnost

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í.

Prodiskutovat projekt

Přečtěte si také