Kerning, metinde görsel tekdüzelik elde etmek için belirli karakter çiftleri arasındaki boşluğun seçici olarak ayarlanmasıdır. Tüm karakterler arasındaki mesafeyi eşit şekilde değiştiren trackingin aksine, kerning her harf çiftinin şeklini dikkate alır: A ve V, T ve o, W ve a. Kerning olmadan, çıkıntılı öğelere sahip kombinasyonlar düzensiz görünür — harfler arasında görsel boşluklar veya sıkışma oluşur. Apple NSAttributedString Dokümantasyonu'na göre, iOS'ta kerning .kern özniteliği aracılığıyla yapılandırılır ve hem pozitif hem de negatif değerleri destekler.
Önemli Noktalar
Kerning, optik artefaktları ortadan kaldırmak için belirli karakter çiftleri arasındaki mesafenin manuel veya otomatik olarak ayarlanması sürecidir. Sorun, her harfin benzersiz bir geometriye sahip olmasından kaynaklanır: A'nın bir tepe noktası, V'nin sağa eğimi, T'nin geniş bir çubuğu vardır. Bu tür harfler yan yana geldiğinde, set width aynı olsa bile, ana hatları arasındaki mesafe düzensiz görünür.
Yazı tipi kerning tabloları, önceden ayarlanmış değerlerle karakter çiftleri içerir. İyi bir yazı tipinde 300 ila 2000 kerning çifti bulunabilir. Profesyonel yazı tipleri — Apple'dan SF Pro veya Google'dan Roboto gibi — Latin ve Kiril harflerinin tüm olası kombinasyonlarını kapsayan titizlikle hazırlanmış kerning tabloları içerir. Fontshop Guide to Kerning'e göre, kerning tablolarının kalitesi profesyonel bir yazı tipinin ana göstergelerinden biridir.
Kerningin görsel etkisi özellikle başlıklarda, logolarda ve büyük punto boyutlarında (24 pt ve üzeri) belirgindir. Küçük metinlerde (12–14 pt) harf aralığı daha dardır ve kerning daha az fark edilir, ancak yine de çalışır. Web tarayıcıları ve mobil işletim sistemleri varsayılan olarak yerleşik kerning uygular, ancak geliştirici belirli tasarımlar için bunu devre dışı bırakabilir veya ayarlayabilir.
Acemi geliştiriciler genellikle kerning ve tracking'i karıştırır, ancak bunlar temelde farklı tipografik parametrelerdir. Kerning, karakter çifti düzeyinde çalışır ve yalnızca harf geometrisinin optik dengesizlik yarattığı belirli kombinasyonlar arasındaki boşluğu ayarlar. Tracking (letter-spacing), seçilen parçadaki tüm karakterler arasındaki aralığı eşit şekilde değiştirir — eşit olarak artırır veya azaltır.
Tracking ne zaman kullanılır: küçük metnin okunabilirliğini artırmak için (pozitif tracking), vurgulu başlıklar oluşturmak için (negatif tracking), arayüz tasarımında metni stillendirmek için. Tracking sayısal bir değer olarak ayarlanır ve önceden kerning uygulanmış çiftler dahil her karaktere uygulanır — kerning düzeltmeleri korunur ancak üzerlerine genel bir kaydırma eklenir.
| Parametre | Kerning | Tracking |
|---|---|---|
| Kapsam | Tekil karakter çiftleri | Metin parçasının tamamı |
| Değer | Her çift için benzersiz | Tüm karakterler için aynı |
| Amaç | Görsel tekdüzelik | Metin yoğunluğu ayarı |
| iOS özniteliği | NSAttributedString'de .kern | CSS'de letter-spacing |
| Görünürlük | 24pt'den itibaren başlıklarda | Tüm punto boyutlarında |
Önemli kural: negatif tracking (sıkıştırma) ile kerning çiftlerine dikkat edin — istenmeyen harf bindirmeleri oluşturabilirler. CSS'de letter-spacing özelliği, yazı tipinin kerning tablosunun üzerine uygulanır ve güçlü sıkıştırmada (letter-spacing: -1px) kerning düzeltmeleri karakterlerin birleşmesine neden olabilir.
iOS'ta kerning, NSAttributedString'deki .kern özniteliği aracılığıyla yönetilir. Öznitelik değeri bir Float'tır, pozitif sayı aralığı artırır, negatif sayı azaltır ve 0 kerningi devre dışı bırakır. Varsayılan değer nil'dir, bu da yazı tipinin kerning tablosunun kullanılması anlamına gelir. Kerning ile çalışmak için birincil API, bir metin aralığına öznitelik eklenen NSMutableAttributedString'tir.
let text = "Kerning in mobile interfaces"
let attributedText = NSMutableAttributedString(
string: text
)
// Kerningi etkinleştir (yazı tipi tablosunu kullanır)
attributedText.addAttribute(
.kern,
value: 0.5,
range: NSRange(
location: 0,
length: text.count
)
)
// UILabel'a uygula
label.attributedText = attributedText
Varsayılan değer .kern = nil, yazı tipi tablosundan kerningi etkinleştirir. Kerningi tamamen devre dışı bırakmanız gerekiyorsa, .kern = 0 olarak ayarlayın. 0.0 ve nil değerleri farklı durumlardır: nil tabloyu kullanır, 0 tüm kerning çiftlerini zorla sıfırlar. Apple Text Programming Guide'a göre, açıkça 0 ayarlamak, tek aralıklı metin veya kerningin müdahale ettiği durumlar için kullanışlıdır — örneğin, sabit genişlikli düğmelerde.
SwiftUI, Text için .kerning() değiştiricisini sağlar. UIKit'in aksine, SwiftUI'de kerning, nitelikli bir dizede değil, görünüm düzeyinde ayarlanır. Değiştirici bir CGFloat kabul eder ve Text bloğu içindeki tüm metne uygulanır. SwiftUI'de kısmi kerning için, Text üzerinde + operatörü ve ayrı değiştiricilerin bir kombinasyonu kullanılır.
struct KerningView: View {
var body: some View {
Text("Kerningli başlık")
.kerning(1.0)
.font(.title)
}
}
Performans: Kerning özniteliğine sahip NSAttributedString, işleme sırasında karakter konumlarını yeniden hesaplar. Statik metin için bu bir kez olur. Dinamik metin için (UICollectionView'da değişen metin) — her değiştiğinde olur. Uzun dizelerde (500 karakterden fazla) kerning ile geniş bir aralık kullanmak, kaydırma sırasında FPS'yi düşürebilir.
Android'de kerning, TextView ve XML düzenlerindeki letterSpacing özelliği aracılığıyla yönetilir. Öznitelik Float türündedir ve yazı tipinin em boyutunun çarpanı olarak çalışır. Değer 0 varsayılan kerninge karşılık gelir, pozitif aralığı artırır, negatif azaltır. letterSpacing, API Level 21'den (Android 5.0 Lollipop) itibaren kullanılabilir.
SpannableString ile uygulama, tüm metin yerine bir dizenin bir kısmına kerning uygulamaya olanak tanır. Hassas kontrol için ScaleXSpan sınıfı veya özel ReplacementSpan kullanılır. Android Developer Guide'a göre, ScaleXSpan karakterleri yatay olarak ölçeklendirerek karakterler arası boşluk değişimini simüle eder, ancak doğrudan kerning çifti kontrolü sağlamaz.
// XML düzeninde
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text with kerning"
android:letterSpacing="0.05" />
// Kotlin'de programatik olarak
val textView = findViewById<TextView>(R.id.myTextView)
textView.letterSpacing = 0.05f
Sınırlama: Android, kerning tablolarını doğrudan desteklemez — letterSpacing tüm karakterler için tracking olarak çalışır. Android'de çift kerningi için, yerleşik kerning tablolarına (OpenType GPOS feature kern) sahip yazı tipleri kullanılır. Destek, işletim sistemi sürümüne ve işleme motoruna bağlıdır: Android 10+'da Minikin tam OpenType özellik desteğiyle kullanılır, eski sürümlerde HarfBuzz sınırlamalarla kullanılır. Öneri: kerning görüntülemeyi Android 8.0 altındaki cihazlarda test edin.
Web'de kerning, yazı tipinin yerleşik kerning tablolarını etkinleştiren veya devre dışı bırakan CSS özelliği font-kerning aracılığıyla kontrol edilir. Değerler: auto (tarayıcı karar verir), normal (kerning etkin), none (kerning devre dışı). Özellik, 2016'dan beri tüm modern tarayıcılar tarafından desteklenmektedir. MDN Web Docs'a göre, font-kerning yalnızca kerning tablosu olan OpenType yazı tiplerine uygulanır.
CSS özelliği letter-spacing, tracking'in benzeridir ancak kerning benzeri efektler için de kullanılır. font-kerning'in aksine, letter-spacing kerning çiftlerini dikkate almadan tüm karakterler arasındaki aralığı eşit şekilde değiştirir. Her iki özellik de kullanıldığında, önce font-kerning uygulanır, ardından letter-spacing bunun üzerine eşit bir kaydırma ekler.
/* Enable kerning for headings */
h1 {
font-kerning: normal;
letter-spacing: 0.02em;
}
/* Disable kerning for monospace */
code, pre {
font-kerning: none;
}
TypeScript aracı, kerningi dikkate alarak optimum letter-spacing hesaplamak için Canvas API aracılığıyla yazı tipinin kerning tablosunu analiz edebilir. Ancak pratikte web geliştiricileri font-kerning: normal'e güvenir ve çoğu durumda optimum sonuçlar verir. Ek letter-spacing ayarı yalnızca tasarım vurguları için gereklidir — örneğin, büyük tipografiye sahip açılış sayfalarında.
Kerning ince ayar aracıdır ve yanlış uygulanması okunabilirliği bozar. Birinci kural: gövde metni için kerningi değiştirmeyin. Profesyonel yazı tiplerinin kerning tabloları, 12–16pt boyutları için zaten optimum değerler içerir. Gövde metni kerningine müdahale etmek düzensizliğe ve görsel gürültüye yol açar.
İkinci kural: 24pt ve üzeri başlıklar için, pozitif kerning kullanın (yazı tipine bağlı olarak 0.5–1.5 pt). Büyük metin, okunabilirlik için daha fazla harf aralığı gerektirir. Düşük x-height'e sahip yazı tipleri (örneğin Didot), yüksek x-height'e sahip yazı tiplerinden (örneğin Helvetica) daha fazla kerning gerektirir. Referans verileri: iOS Apple Music uygulamasında başlıklar 0.8 pt kerning kullanır.
Üçüncü kural: kerningi her zaman gerçek dizelerde test edin, Lorem Ipsum'da değil. Farklı karakter kombinasyonları farklı görsel efektler üretir. Çıkıntılı öğelere sahip sesli ve sessiz harf çiftlerine özellikle dikkat edin: AV, Te, To, Wa, LT. Negatif kerningde fi, fl, fj çiftlerine dikkat edin — bazı yazı tiplerinde bitişik harf olmadan birleşebilirler.
Erişilebilirlik yönü: Disleksili kullanıcılar, hafif pozitif kerning (0.3–0.5 pt) içeren metinleri daha iyi okur. iOS ve Android, uygulama kerningini geçersiz kılabilen erişilebilirlik ayarlarını destekler. Dynamic Type ile UIFontDescriptor kullanın ve UIAccessibility aracılığıyla erişilebilirlik ayarlarında kerningi dikkate alın. Önemli: sistem kerning ayarlarını engellemeyin — bu, metin uyarlama ile ilgili WCAG 2.2 Kılavuz İlkesi 1.4.12'yi ihlal eder.
Sıkça Sorulan Sorular
NSAttributedString'de .kern = 0 özniteliğini ayarlayın. Değer 0, yerleşik yazı tipi tabloları dahil tüm kerning çiftlerini zorla sıfırlar. Tüm metin düzeyinde tam devre dışı bırakma için, attributedText aracılığıyla UILabel parametrelerinde .kern = 0 olarak ayarlayın.
Kerning, karakterler arasındaki mesafeyi değiştirir, şekillerini değiştirmez. Bitişik harf (ligature), iki veya daha fazla karakteri tek bir glifle değiştirir. Bitişik harfler genellikle kerningin istenmeyen birleşmeyi ortadan kaldıramadığı durumlarda kullanılır — örneğin, fi çifti.
Evet, Android 10'dan (API 29) itibaren OpenType GPOS feature kern'in tam desteğiyle Minikin işleme kullanılır. Daha eski sürümlerde destek, cihaz üreticisine ve HarfBuzz sürümüne bağlıdır. Birden çok cihazda test edilmesi önerilir.
AVOWaToLt dizesini kullanın — sorunlu kerning çiftlerini içerir. Görsel boşluklar çıplak gözle fark edilebiliyorsa, yazı tipinin kerning tablosu düşük kalitelidir. Profesyonel kontrol için FontForge veya Glyphs araçlarını kullanın.
Evet. UICollectionView'da kerning ile NSAttributedString dinamik olarak güncellenirken, karakter konumlarının yeniden hesaplanması kaydırma sırasında FPS'yi düşürebilir. Uzun listeler için, nitelikli dizeleri önbelleğe alın veya varsayılan ayarlarla UILabel kullanın.
Ö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