Kerning — matnning vizual bir xilligiga erishish uchun ma'lum belgilar juftliklari orasidagi intervalni tanlab tuzatishdir. Barcha belgilar orasidagi masofani bir xil o'zgartiruvchi trekingdan farqli o'laroq, kerning har bir harf juftligining shaklini hisobga oladi: A va V, T va o, W va a. Kerningsiz chiqib turuvchi elementlarga ega birikmalar notekis ko'rinadi — harflar orasida vizual bo'shliqlar yoki siqilish paydo bo'ladi. Apple NSAttributedString hujjatlariga ko'ra, iOS-da kerning .kern atributi orqali sozlanadi va ham musbat, ham manfiy qiymatlarni qo'llab-quvvatlaydi.
Asosiy ma'lumotlar
Kerning — optik artefaktlarni bartaraf etish uchun ma'lum belgilar juftliklari orasidagi masofani qo'lda yoki avtomatik tuzatish jarayonidir. Muammo har bir harfning noyob geometriyaga ega bo'lishi sababli yuzaga keladi: A ning uchi, V ning o'ng qiyaligi, T ning keng ko'ndalang chizig'i. Bunday harflar yonma-yon turganda, ularning konturlari orasidagi masofa notekis ko'rinadi, garchi belgilararo interval (set width) bir xil bo'lsa ham.
Shriftning kerning jadvallari oldindan belgilangan tuzatish qiymatlari bilan belgilar juftliklarini o'z ichiga oladi. Yaxshi shriftda 300 dan 2000 gacha kerning juftligi bo'lishi mumkin. Professional shriftlar — masalan, Apple-dan SF Pro yoki Google-dan Roboto — lotin va kirill alifbolarining barcha mumkin bo'lgan birikmalarini qamrab oluvchi puxta ishlab chiqilgan kerning jadvallarini o'z ichiga oladi. Fontshop Guide to Kerning ga ko'ra, kerning jadvallarining sifati professional shriftning asosiy belgilaridan biridir.
Vizual effekt kerning ayniqsa sarlavhalarda, logotiplarda va katta o'lchamli matnda (24 pt dan) sezilarli. Kichik matnda (12-14 pt) harflar orasidagi masofalar kichik va kerning kamroq seziladi, garchi ishlashda davom etsa ham. Veb-brauzerlar va mobil OT lar standart sifatida o'rnatilgan kerningni qo'llaydi, ammo ishlab chiqaruvchi uni o'chirib qo'yishi yoki muayyan dizaynga moslashtirishi mumkin.
Boshlang'ich ishlab chiqaruvchilar ko'pincha kerning va trekingni aralashtiradilar, ammo bu tipografiyaning tubdan farqli parametrlaridir. Kerning belgilar juftliklari darajasida ishlaydi va masofani faqat harflar geometriyasi optik muvozanatsizlikni yaratadigan muayyan birikmalar orasida tuzatadi. Treking (letter-spacing) tanlangan fragmentning barcha belgilari orasidagi intervalni bir xilda o'zgartiradi — uni bir tekis oshiradi yoki kamaytiradi.
Treking qachon qo'llaniladi: kichik matnning o'qilishini yaxshilash uchun (musbat treking), urg'uli sarlavhalar yaratish uchun (manfiy treking), interfeys dizaynida matnni stilizatsiya qilish uchun. Treking raqamli qiymat bilan beriladi va kerning qilingan juftliklarni ham o'z ichiga olgan holda har bir belgiga qo'llaniladi — kerning tuzatishlari saqlanadi, ammo ularning ustiga umumiy siljish qo'shiladi.
| Parametr | Kerning | Treking |
|---|---|---|
| Qo'llash sohasi | Alohida belgilar juftliklari | Butun matn fragmenti |
| Qiymat | Har bir juftlik uchun individual | Barcha belgilar uchun yagona |
| Maqsad | Vizual bir xillik | Matn zichligini tartibga solish |
| iOS atributi | .kern NSAttributedString da | CSS da letter-spacing |
| Ko'rinish | 24pt dan sarlavhalarda | Barcha o'lchamlarda |
Muhim qoida: manfiy trekingda (siqish) kerning juftliklariga e'tibor bering — ular istalmagan harf ustma-ust tushishlarini yaratishi mumkin. CSS da letter-spacing xususiyati shriftning kerning jadvali ustiga qo'llaniladi va kuchli siqishda (letter-spacing: -1px) kerning tuzatishlari belgilarning qo'shilishiga olib kelishi mumkin.
iOS-da kerning .kern atributi orqali NSAttributedString da boshqariladi. Atributning qiymati Float, bunda musbat son intervalni oshiradi, manfiy kamaytiradi, 0 esa kerningni o'chiradi. Standart qiymat nil, ya'ni shriftning kerning jadvalidan foydalanish. Kerning bilan ishlash uchun asosiy API — matn diapazoniga atribut qo'shadigan NSMutableAttributedString.
let text = "Kerning in mobile interfaces"
let attributedText = NSMutableAttributedString(
string: text
)
// Kerningni yoqish (shrift jadvalidan foydalanadi)
attributedText.addAttribute(
.kern,
value: 0.5,
range: NSRange(
location: 0,
length: text.count
)
)
// UILabel ga qo'llash
label.attributedText = attributedText
Standart qiymat .kern = nil shrift jadvalidan kerningni faollashtiradi. Agar kerningni butunlay o'chirish kerak bo'lsa — .kern = 0 ni o'rnating. 0.0 va nil qiymatlari turli holatlardir: nil jadvaldan foydalanadi, 0 barcha kerning juftliklarini majburan nolga tushiradi. Apple Text Programming Guide ga ko'ra, aniq 0 ni ko'rsatish monoshirin matn yoki kerning xalaqit beradigan hollar uchun foydali — masalan, sobit kenglikdagi tugmalarda.
SwiftUI Text uchun .kerning() modifikatorini taqdim etadi. UIKit dan farqli o'laroq, SwiftUI da kerning atributlashtirilgan satr emas, balki ko'rinish darajasida o'rnatiladi. Modifikator CGFloat qabul qiladi va Text bloki ichidagi butun matnga qo'llaniladi. SwiftUI da qisman kerning uchun + operatori va alohida modifikatorlarning kombinatsiyasi ishlatiladi.
struct KerningView: View {
var body: some View {
Text("Kerning bilan sarlavha")
.kerning(1.0)
.font(.title)
}
}
Ishlash: kerning atributiga ega NSAttributedString ko'rsatish paytida belgilar pozitsiyalarini qayta hisoblab chiqadi. Statik matn uchun bu bir marta sodir bo'ladi. Dinamik matn uchun (UICollectionView da o'zgaruvchi matn) — har safar o'zgarishda. Uzun satrlarda (500 belgidan ortiq) kerning bilan katta diapazonni ishlatish aylantirish paytida FPS ni pasaytirishi mumkin.
Android-da kerning TextView va XML layoutda letterSpacing xususiyati orqali boshqariladi. Atribut Float turiga ega va shrift o'lchamining em ko'paytuvchisi sifatida ishlaydi. 0 qiymati standart kerningga mos keladi, musbat — intervalni oshiradi, manfiy — kamaytiradi. letterSpacing API Level 21 (Android 5.0 Lollipop) dan boshlab mavjud.
SpannableString orqali amalga oshirish kerningni butun matnga emas, balki satrning bir qismiga qo'llash imkonini beradi. Aniq nazorat uchun ScaleXSpan sinfi yoki maxsus ReplacementSpan ishlatiladi. Android Developer Guide ga ko'ra, ScaleXSpan belgilarni eniga masshtablaydi, belgilararo interval o'zgarishini simulyatsiya qiladi, ammo kerning juftliklari ustidan to'g'ridan-to'g'ri nazorat bermaydi.
// XML layoutda
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text with kerning"
android:letterSpacing="0.05" />
// Kotlin da dasturiy ravishda
val textView = findViewById<TextView>(R.id.myTextView)
textView.letterSpacing = 0.05f
Cheklash: Android kerning jadvallarini to'g'ridan-to'g'ri qo'llab-quvvatlamaydi — letterSpacing barcha belgilar uchun treking kabi ishlaydi. Android da juftlik kerningi uchun o'rnatilgan kerning jadvallari (OpenType GPOS feature kern) bo'lgan shriftlar ishlatiladi. Qo'llab-quvvatlash OT versiyasi va render muharrigiga bog'liq: Android 10+ da OpenType xususiyatlarini to'liq qo'llab-quvvatlovchi Minikin, oldingi versiyalarda cheklovlarga ega HarfBuzz ishlatiladi. Tavsiya: Android 8.0 dan past qurilmalarda kerning ko'rinishini tekshiring.
Vebda kerning shriftning o'rnatilgan kerning jadvallarini faollashtiruvchi yoki o'chiruvchi CSS xususiyati font-kerning orqali boshqariladi. Qiymatlar: auto (brauzer qaror qiladi), normal (kerning yoqilgan), none (kerning o'chirilgan). Xususiyat 2016 yildan beri barcha zamonaviy brauzerlar tomonidan qo'llab-quvvatlanadi. MDN Web Docs ga ko'ra, font-kerning faqat kerning jadvaliga ega OpenType shriftlariga qo'llaniladi.
CSS xususiyati letter-spacing — trekingning analogi, ammo kerningga o'xshash effektlar uchun ham ishlatiladi. font-kerning dan farqli o'laroq, letter-spacing kerning juftliklarini hisobga olmagan holda barcha belgilar orasidagi intervalni bir xil o'zgartiradi. Ikkala xususiyatdan foydalanganda font-kerning birinchi qo'llaniladi, keyin letter-spacing uning ustiga bir tekis siljish qo'shadi.
/* Enable kerning for headings */
h1 {
font-kerning: normal;
letter-spacing: 0.02em;
}
/* Disable kerning for monospace */
code, pre {
font-kerning: none;
}
TypeScript yordamchi dasturi kerningni hisobga olgan holda optimal letter-spacing ni hisoblash uchun Canvas API orqali shriftning kerning jadvalini tahlil qilishi mumkin. Ammo amalda veb-ishlab chiqaruvchilar font-kerning: normal ga tayanadilar — aksariyat hollarda optimal natija beradi. Qo'shimcha letter-spacing sozlash faqat dizayn urg'ulari uchun talab qilinadi — masalan, katta tipografiyali landing sahifalarida.
Kerning nozik sozlash vositasidir va uni noto'g'ri qo'llash o'qilishni yomonlashtiradi. Birinchi qoida: asosiy matn (body text) uchun kerningni o'zgartirmang. Professional shriftlarning kerning jadvallari allaqachon 12-16pt o'lchamlari uchun optimal qiymatlarni o'z ichiga oladi. Asosiy matn kerningiga aralashish notekislikka va vizual shovqinga olib keladi.
Ikkinchi qoida: 24pt dan sarlavhalar uchun musbat kerning (shriftga qarab 0.5-1.5 pt) ishlating. Katta matn o'qilish uchun harflar orasida ko'proq bo'shliqni talab qiladi. Kam x-height li shriftlar (masalan, Didot) yuqori x-height li shriftlardan (masalan, Helvetica) ko'proq kerning talab qiladi. Test ma'lumotlari: iOS Apple Music ilovasida sarlavhalar 0.8 pt kerningdan foydalanadi.
Uchinchi qoida: kerningni har doim haqiqiy satrlarda tekshiring, test Lorem Ipsum da emas. Turli belgilar kombinatsiyalari turli vizual effekt beradi. Chiqib turuvchi elementlarga ega unli va undosh juftliklariga alohida e'tibor bering: AV, Te, To, Wa, LT. Manfiy kerningda fi, fl, fj juftliklarini kuzating — ba'zi shriftlarda ligaturasiz qo'shilishi mumkin.
Foydalanish imkoniyati aspekti: disleksiyasi bo'lgan foydalanuvchilar kichik musbat kerning (0.3-0.5 pt) bilan matnni yaxshiroq o'qiydilar. iOS va Android ilova kerningini bekor qilishi mumkin bo'lgan foydalanish imkoniyati sozlamalarini qo'llab-quvvatlaydi. Dynamic Type bilan UIFontDescriptor dan foydalaning va foydalanish imkoniyati sozlamalarida kerningni UIAccessibility orqali hisobga oling. Muhim: tizim kerning sozlamalarini bloklamang — bu WCAG 2.2 Guideline 1.4.12 matn moslashuvini buzadi.
Tez-tez so'raladigan savollar
NSAttributedString da .kern = 0 atributini o'rnating. 0 qiymati shriftning o'rnatilgan jadvallarini ham o'z ichiga olgan holda barcha kerning juftliklarini majburan nolga tushiradi. Butun matn darajasida to'liq o'chirish uchun UILabel parametrlarida attributedText orqali .kern = 0 ni o'rnating.
Kerning belgilar orasidagi masofani o'zgartiradi, ularning shakllarini o'zgarishsiz qoldiradi. Ligatura ikki yoki undan ortiq belgini bitta grafik element bilan almashtiradi. Ligaturalar ko'pincha kerning istalmagan qo'shilishni bartaraf eta olmaydigan joylarda qo'llaniladi — masalan, fi juftligi.
Ha, Android 10 (API 29) dan boshlab OpenType GPOS feature kern ni to'liq qo'llab-quvvatlovchi Minikin render muharrigi ishlatiladi. Oldingi versiyalarda qo'llab-quvvatlash qurilma ishlab chiqaruvchisi va HarfBuzz versiyasiga bog'liq. Bir nechta qurilmalarda sinovdan o'tkazish tavsiya etiladi.
AVOWaToLt satridan foydalaning — unda muammoli kerning juftliklari to'plangan. Vizual uzilishlar yalang'och ko'z bilan ko'rinsa, shriftning kerning jadvali past sifatli. Professional tekshirish uchun FontForge yoki Glyphs vositalaridan foydalaning.
Ha. UICollectionView da kerning bilan NSAttributedString ni dinamik yangilashda belgilar pozitsiyalarini qayta hisoblash aylantirish paytida FPS ni pasaytirishi mumkin. Uzoq ro'yxatlar uchun atributlashtirilgan satrlarni keshlang yoki standart sozlamalar bilan UILabel dan foydalaning.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.