Ligatür, okunabilirliği ve metin estetiğini iyileştirmek için iki veya daha fazla karakterin tek bir tipografik işarette grafiksel olarak birleştirilmesidir. Klasik örnekler fi, fl, ff, ffi çiftlerini içerir — burada f harfinin çıkıntılı elemanı bitişik karakterle kaynaşarak görsel bir çatışmayı önler. Modern mobil ve web geliştirmede, ligatürler OpenType özellikleri aracılığıyla yazı tipi düzeyinde kontrol edilir ve iOS, Android ve tarayıcılarda desteklenir. MDN Web Docs'a göre, CSS özelliği font-variant-ligatures, geliştiricinin çeşitli ligatür türlerini etkinleştirmesine ve devre dışı bırakmasına olanak tanır: standart, isteğe bağlı (dekoratif) ve bağlamsal.
Önemli Noktalar
Ligatür, iki veya daha fazla karakterin özel olarak tasarlanmış tek bir glifle değiştirildiği bir tipografik tekniktir. Bir ligatürün temel amacı, bitişik karakterler arasındaki görsel çatışmaları ortadan kaldırmak ve metin algısını iyileştirmektir. Örneğin fi çiftinde, f harfinin üst çıkıntısı i harfinin noktasıyla çarpışır — ligatür onları tek bir zarif sembolde birleştirir.
Ligatürler zorunlu (standart) ve isteğe bağlı (dekoratif) olarak ikiye ayrılır. Standart ligatürler çoğu yazı tipinde bulunan çiftlerdir: fi, fl, ff, ffi, ffl. Kaliteli tipografi için gerekli kabul edilirler ve yazı tipinde varsayılan olarak etkindirler. OpenType Spesifikasyonuna göre, standart ligatürler 'liga' etiketiyle kodlanır ve herhangi bir profesyonel yazı tipinde bulunmalıdır.
Görsel etki: ligatür olmadan, fi çifti istenmeyen bir çarpışmayla iki ayrı karakter gibi görünür. Ligatürle birlikte, uyumlu bir sembol gibi görünür. Fark özellikle büyük boyutlarda (başlıklar, logolar) ve çok sayıda tekrarlanan çift içeren metinlerde belirgindir (örneğin Almancada häufigen Buchstabenkombinationen ile).
OpenType yazı tipleri, her biri kendi etiketi ve amacı olan birkaç ligatür türünü destekler. Standart (etiket 'liga'), bir yazı tipinde varsayılan olarak etkin olan zorunlu ligatürlerdir. Okunabilirliği artırırlar ve geçerli bir sebep olmadan devre dışı bırakılmamalıdırlar. fi, fl, ff, ffi, ffl ve yazı yüzüne özgü diğer çiftleri içerirler.
İsteğe bağlı ligatürler (etiket 'dlig'), tasarımcının takdirine göre isteğe bağlı olarak etkinleştirilen dekoratif ligatürlerdir. Okunabilirlik için gerekli değillerdir ve metin stilizasyonu için kullanılırlar: ct, st, sp, Th, Qu ve diğerleri. İsteğe bağlı ligatürler genellikle tarihi veya kaligrafik karaktere sahip yazı tiplerinde bulunur — örneğin Garamond veya Adobe Caslon'da. Uyarı: aşırı isteğe bağlı ligatür kullanımı okunabilirliği bozar, özellikle disleksisi olan kullanıcılar için.
Bağlamsal ligatürler (etiket 'clig'), karakterin çevresindeki bağlama bağlı olan ligatürlerdir. Yalnızca belirli koşullar altında uygulanırlar: karakter bir kelimenin başında veya sonundaysa, belirli bir noktalama işaretinden sonra vb. Bağlamsal ligatürler, tüm yazı tipleri tarafından desteklenmeyen gelişmiş bir OpenType özelliğidir. Tarihi ligatürler (etiket 'hlig'), eski basılı kitapların stilini taklit eden güncelliğini yitirmiş ligatürlerdir (uzun s, &). Yalnızca tarihi veya stilize metinlerde nadiren kullanılırlar.
| Ligatür Türü | OpenType Etiketi | Örnekler | Varsayılan |
|---|---|---|---|
| Standart | liga | fi, fl, ff, ffi | Etkin |
| İsteğe Bağlı | dlig | ct, st, sp, Th | Devre Dışı |
| Bağlamsal | clig | Konuma bağlı | Etkin |
| Tarihi | hlig | uzun s, ct (tarihi) | Devre Dışı |
Nadir türler: matematiksel dizgi için ligatürler (matematiksel semboller için etiket 'dlig') ve baş harf ligatürleri (drop caps) de mevcuttur, ancak bunlar arayüz tipografisinde kullanılmaz ve yalnızca özelleşmiş yazı tipleri tarafından desteklenir.
Ligatürler dijital tipografiden çok önce — 15. yüzyıldaki metal düzgi çağında ortaya çıktı. İlk matbaacı Johannes Gutenberg, 42 satırlık İncil'indeki satırlarda yerden tasarruf etmek için ligatürler kullandı. Her bir harf, fiziksel bir metal bloktu ve iki karakteri tek bir parçada birleştirmek kurşun tasarrufu sağlıyor ve dizgiyi basitleştiriyordu. Standart ligatürler fi, fl, ffi, ffl o çağın mirasıdır.
Fotodizgide (20. yüzyıl), ligatürler pratik işlevlerini kaybetti ancak kaliteli tipografinin estetik bir unsuru olarak kaldı. Yazı tipi tasarımcıları, profesyonelliğin ve detaylara gösterilen özenin bir işareti haline geldikleri için yazı yüzlerine ligatürleri dahil etmeye devam ettiler. Dijital yazı tipleri çağında (PostScript, TrueType), ligatürler programatik değiştirme ile ayrı glifler olarak uygulanıyordu.
OpenType (1996) bir devrimdi: kullanıcı müdahalesi olmadan bir karakter dizisini otomatik olarak bir ligatürle değiştiren GSUB (Glif Değiştirme Tablosu) mekanizmasını tanıttı. GSUB, bağlamsal değiştirmeleri, koşulları ve yedek varyantları destekler. Bu, yazı tiplerinin etiketler aracılığıyla etkinleştirilebilen/devre dışı bırakılabilen yüzlerce ligatüre sahip olmasına olanak tanıdı. Modern yazı tipleri — SF Pro, Roboto, Inter — tüm platformlarda OpenType ligatürlerini destekler: iOS, Android, macOS, Windows, web.
iOS'ta, ligatürler UIFontDescriptor aracılığıyla featureSettings özniteliği kullanılarak kontrol edilebilir. Bu öznitelik, her biri bir OpenType özelliğini tanımlayan sözlükler dizisini kabul eder. Bir tanımlayıcı aracılığıyla ligatürleri kontrol etmek, yazı tipinin diğer OpenType özelliklerini etkilemeden bireysel ligatür türlerini yönetmenin tek yoludur.
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// İsteğe bağlı ligatürleri etkinleştir
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString ayrıca ligature özniteliğini destekler: NSNumber. 0 değeri tüm ligatürleri devre dışı bırakır, 1 standardı etkinleştirir (varsayılan), 2 tümünü etkinleştirir (isteğe bağlı dahil). Ancak, NSAttributedString'deki ligature özniteliği, ligatür türleri üzerinde ince ayarlı kontrol sağlamaz — yalnızca küresel etkinleştirme/devre dışı bırakma. Seçici kontrol için, featureSettings ile UIFontDescriptor kullanın.
SwiftUI, ligatürler için doğrudan bir değiştirici sağlamaz. SwiftUI'de ligatürleri kontrol etmek için, UIFontDescriptor aracılığıyla istenen ayarlara sahip bir UIFont oluşturun ve Font(descriptor:size:) aracılığıyla kullanın. Alternatif olarak, AppKit/UIKit görünümlerinde NSMutableAttributedString için .ligature özniteliği ile AttributedString (iOS 15+) kullanın.
// AttributedString aracılığıyla özel ligatürlere sahip SwiftUI
var attributedText: AttributedString {
var text = AttributedString(
"Effective typography with ligatures"
)
// Tüm metin için tüm ligatürleri etkinleştir
text.ligature = .all
return text
}
var body: some View {
Text(attributedText)
}
Web'de, ligatürler CSS özelliği font-variant-ligatures aracılığıyla kontrol edilir ve şu anahtar kelimeleri kabul eder: common-ligatures (standart etkin), no-common-ligatures (standart devre dışı), discretionary-ligatures, no-discretionary-ligatures, contextual, no-contextual. Özellik, 2015'ten beri tüm modern tarayıcılar tarafından desteklenmektedir. Varsayılan olarak, tarayıcılar standart ve bağlamsal ligatürleri etkinleştirir.
/* 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, ligatürleri kontrol etmek için doğrudan bir API'ye sahip değildir. Android'de, ligatürler yazı tipi düzeyinde ve Minikin oluşturma motoru (Android 10+) tarafından kontrol edilir. Yazı tipi bir OpenType GSUB tablosu içeriyorsa, ligatürler otomatik olarak uygulanır. Android'de ligatürleri devre dışı bırakmak için, Typeface.Builder aracılığıyla oluşturulan özel Typeface'ler veya metin ön işleme (görüntülemeden önce karakter değiştirme) kullanılır. Sınırlama: Android 10'un altında, ligatürler bazı TTF yazı tipleriyle doğru çalışmayabilir.
Düşük seviyeli kontrol: tüm platformlarda, OpenType özellikleri için font-feature-settings parametresiyle CSS @font-face kullanabilirsiniz. Bu yöntem, ligatürler dahil herhangi bir OpenType etiketine erişim sağlar. Örnek: font-feature-settings: 'liga' 1, 'dlig' 1. Ancak, font-feature-settings düşük seviyeli bir sözdizimidir ve MDN, daha yüksek seviyeli bir alternatif olarak font-variant-ligatures kullanılmasını önerir.
Özel bir ligatür sınıfı — programlama ligatürleri — operatörleri ve kod sembollerini daha okunabilir gliflerde birleştirir. Fira Code, JetBrains Mono, Cascadia Code gibi programlama yazı tipleri, yaygın operatörler için isteğe bağlı ligatürler içerir: != (≠ olur), >= (≥ olur), -> (ok olur), => (kalın ok olur), === (üçlü eşit olur).
Programlama ligatürleri, geliştirici topluluğunda tartışmalı bir konudur. Savunucular, operatörlerin tek kavramlar olarak algılanması nedeniyle ligatürlerin kod okumayı hızlandırdığını iddia eder. Bir çalışma (Kera ve diğerleri, PLATEAU 2020), ligatürlerin kod okuma hızını etkilemediğini, ancak geliştiricilerin %67'sinin öznel olarak bunları beğendiğini gösterdi. Ligatür karşıtları, bunların kodu bozduğunu belirtiyor: düzenleyicide != sembolü ≠ olarak görüntülenir, ancak metin dosyasında iki karakter olarak saklanır ve bu da işbirliği sırasında kafa karışıklığına neden olabilir.
Teknik uygulama: programlama ligatürleri, isteğe bağlı OpenType ligatürleridir (etiket 'dlig'). Varsayılan olarak devre dışıdırlar ve kod düzenleyicisinde yazı tipi ayarları aracılığıyla etkinleştirilirler. Bu tür yazı tiplerini kullanan geliştiriciler, isteğe bağlı ligatürleri etkinleştirmek için düzenleyiciyi yapılandırmalıdır. Terminallerde (iTerm2, Windows Terminal), ligatürler ayrıca yazı tipi ayarları aracılığıyla desteklenir. Uyumluluk: tüm düzenleyiciler ve terminaller OpenType ligatürlerini desteklemez. Bir yazı tipi seçmeden önce, araç takımınızla uyumluluğu kontrol edin.
// Örnek: JetBrains Mono'da operatör ligatürleri
val isEqual = a != b // != ≠ olarak işlenir
val arrow = x -> x + 1 // -> → olarak işlenir
val range = 1 .. 10 // .. aralık olarak işlenir
Popüler yazı tipleri programlama ligatürleriyle: Fira Code (ligatürlü ilk toplu yazı tipi, 2015), JetBrains Mono (kod okumak için optimize edilmiş, 2020), Cascadia Code (Microsoft'tan, 2019), Iosevka (modüler ligatür sistemiyle özelleştirilebilir yazı tipi). Her yazı tipinin kendi ligatür seti vardır — 50'den 150+ değiştirmeye kadar. Öneri: Fira Code veya JetBrains Mono ile başlayın — düzenleyicilerde ve IDE'lerde en iyi desteğe sahiptirler.
Sıkça Sorulan Sorular
NSAttributedString'de attribute ligature = 0 olarak ayarlayın veya kCommonLigaturesOffSelector ile UIFontDescriptor kullanın. SwiftUI'de .ligature = .disabled ile AttributedString oluşturun.
Ligatür, iki karakteri yeni bir glifle değiştirerek şekillerini değiştirir. Kerning, karakterlerin şeklini değiştirmeden aralarındaki boşluğu ayarlar. Ligatür grafiksel bir bağlantıdır; kerning ise mekansal bir ayarlamadır.
Evet, Android 10'dan (API 29) itibaren. Minikin oluşturma, OpenType GSUB tablolarını tamamen destekler. Önceki sürümlerde destek, cihaz üreticisine ve yazı tipi motoru sürümüne bağlıdır.
Gövde metni için standart ligatürler (fi, fl, ff) yeterlidir — okunabilirliği artırır ve kullanıcı için görünmezdir. İsteğe bağlı ligatürleri yalnızca başlıklarda veya dekoratif metinlerde kullanın, çünkü uzun metinlerde okunabilirliği azaltırlar.
Düzenleyici OpenType 'dlig' etiketini desteklemeli ve isteğe bağlı ligatürleri oluşturmalıdır. VS Code, IntelliJ IDEA, Sublime Text bunları destekler. Eski terminaller ve düzenleyiciler (nano, GUI'siz vim) desteklemez. Düzenleyici ayarlarınızı kontrol edin: font-ligatures'i etkinleştirin.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun