Kerning — mətnin vizual bərabərliyinə nail olmaq üçün xüsusi simvol cütləri arasında seçici düzəlişdir. Bütün simvollar arasındakı məsafəni bərabər dəyişən trekinqdən fərqli olaraq, kerning hər hərf cütünün formasını nəzərə alır: A və V, T və o, W və a. Kerning olmadan çıxıntılı elementləri olan birləşmələr qeyri-bərabər görünür — hərflər arasında vizual boşluqlar və ya sıxılma yaranır. Apple NSAttributedString Sənədləşməsinə görə, iOS-da kerning .kern atributu vasitəsilə qurulur və həm müsbət, həm də mənfi dəyərləri dəstəkləyir.
Əsas məqamlar
Kerning — optik artefaktları aradan qaldırmaq üçün xüsusi simvol cütləri arasındakı məsafənin əl və ya avtomatik düzəlişi prosesidir. Problem hər hərfin unikal həndəsəyə malik olması səbəbindən yaranır: A-nın təpəsi, V-nin sağ əyilməsi, T-nin geniş çarpazı var. Belə hərflər yan-yana durduqda, konturları arasındakı məsafə qeyri-bərabər görünür, baxmayaraq ki, simvollararası interval (set width) eynidir.
Şriftin kerning cədvəllərində əvvəlcədən təyin edilmiş düzəliş dəyərləri olan simvol cütləri var. Yaxşı şriftdə 300-dən 2000-ə qədər kerning cütü ola bilər. Peşəkar fontlar — məsələn, Apple-dan SF Pro və ya Google-dan Roboto — latın və kiril əlifbalarının bütün mümkün birləşmələrini əhatə edən diqqətlə işlənmiş kerning cədvəllərini ehtiva edir. Fontshop Guide to Kerning-ə görə, kerning cədvəllərinin keyfiyyəti peşəkar şriftin əsas əlamətlərindən biridir.
Vizual effekt kerning xüsusilə başlıqlarda, loqolarda və böyük ölçülü mətndə (24 pt-dən) nəzərə çarpır. Kiçik mətndə (12-14 pt) hərflərarası məsafələr kiçikdir və kerning daha az nəzərə çarpır, baxmayaraq ki, işləməyə davam edir. Veb brauzerlər və mobil ƏS-lər standart olaraq daxili kerning tətbiq edir, lakin tərtibatçı onu söndürə və ya konkret dizayna uyğunlaşdıra bilər.
Başlanğıc tərtibatçılar tez-tez kerning və trekinqi qarışdırır, lakin bunlar tipoqrafiyanın prinsipial olaraq fərqli parametrləridir. Kerning simvol cütləri səviyyəsində işləyir və məsafəni yalnız həndəsəsi optik balanssızlıq yaradan xüsusi birləşmələr arasında düzəldir. Trekinq (letter-spacing) seçilmiş fraqmentin bütün simvolları arasındakı intervalı eyni şəkildə dəyişir — onu bərabər artırır və ya azaldır.
Trekinq nə vaxt tətbiq olunur: kiçik mətnin oxunuşluğunu yaxşılaşdırmaq üçün (müsbət trekinq), vurğulu başlıqlar yaratmaq üçün (mənfi trekinq), interfeys dizaynında mətnin stilizasiyası üçün. Trekinq ədədi dəyərlə təyin edilir və artıq kerning olunmuş cütlər də daxil olmaqla hər bir simvola tətbiq olunur — kerning düzəlişləri saxlanılır, lakin onların üzərinə ümumi yerdəyişmə əlavə olunur.
| Parametr | Kerning | Trekinq |
|---|---|---|
| Tətbiq sahəsi | Ayrı-ayrı simvol cütləri | Bütün mətn fraqmenti |
| Dəyər | Hər cüt üçün fərdi | Bütün simvollar üçün vahid |
| Məqsəd | Vizual bərabərlik | Mətn sıxlığının tənzimlənməsi |
| iOS atributu | NSAttributedString-də .kern | CSS-də letter-spacing |
| Görünürlük | 24pt-dən başlıqlarda | Bütün ölçülərdə |
Vacib qayda: mənfi trekinqdə (sıxma) kerning cütlərinə diqqət yetirin — onlar arzuolunmaz hərf üst-üş düşmələri yarada bilər. CSS-də letter-spacing xassəsi şriftin kerning cədvəlinin üzərinə tətbiq olunur və güclü sıxma zamanı (letter-spacing: -1px) kerning düzəlişləri simvolların birləşməsinə səbəb ola bilər.
iOS-da kerning .kern atributu vasitəsilə NSAttributedString-də idarə olunur. Atributun dəyəri Float-dır, burada müsbət ədəd intervalı artırır, mənfi azaldır, 0 isə kerningi söndürür. Standart dəyər nil-dir, yəni şriftin kerning cədvəlindən istifadə olunur. Kerninglə iş üçün əsas API — mətn diapazonuna atribut əlavə edən NSMutableAttributedString.
let text = "Kerning in mobile interfaces"
let attributedText = NSMutableAttributedString(
string: text
)
// Kerningi aktivləşdir (şrift cədvəlindən istifadə edir)
attributedText.addAttribute(
.kern,
value: 0.5,
range: NSRange(
location: 0,
length: text.count
)
)
// UILabel-ə tətbiq et
label.attributedText = attributedText
Standart dəyər .kern = nil şrift cədvəlindən kerningi aktivləşdirir. Kerningi tamamilə söndürmək lazımdırsa — .kern = 0 təyin edin. 0.0 və nil dəyərləri fərqli hallardır: nil cədvəldən istifadə edir, 0 bütün kerning cütlərini məcburi sıfırlayır. Apple Text Programming Guide-a görə, açıq şəkildə 0 təyin etmək monospace mətn və ya kerningin mane olduğu hallar üçün faydalıdır — məsələn, sabit enli düymələrdə.
SwiftUI Text üçün .kerning() modifieri təmin edir. UIKit-dən fərqli olaraq, SwiftUI-də kerning atributlaşdırılmış sətir deyil, görünüş səviyyəsində təyin edilir. Modifier CGFloat qəbul edir və Text bloku daxilində bütün mətnə tətbiq olunur. SwiftUI-də qismən kerning üçün + operatoru və ayrı-ayrı modifierlərin kombinasiyası istifadə olunur.
struct KerningView: View {
var body: some View {
Text("Kerning ilə başlıq")
.kerning(1.0)
.font(.title)
}
}
Performans: kerning atributu olan NSAttributedString render zamanı simvol mövqelərini yenidən hesablayır. Statik mətn üçün bu bir dəfə baş verir. Dinamik mətn üçün (UICollectionView-də dəyişən mətn) — hər dəfə dəyişiklik zamanı. Uzun sətirlərdə (500 simvoldan çox) kerning ilə böyük diapazonun istifadəsi scroll zamanı FPS-i aşağı sala bilər.
Android-də kerning TextView və XML düzənində letterSpacing xassəsi vasitəsilə idarə olunur. Atribut Float tipinə malikdir və şrift ölçüsünün em çarpanı kimi işləyir. 0 dəyəri standart kerningə uyğundur, müsbət — intervalı artırır, mənfi — azaldır. letterSpacing API Level 21-dən (Android 5.0 Lollipop) etibarən mövcuddur.
SpannableString vasitəsilə tətbiq kerningi bütün mətnə deyil, sətrin bir hissəsinə tətbiq etməyə imkan verir. Dəqiq nəzarət üçün ScaleXSpan sinfi və ya xüsusi ReplacementSpan istifadə olunur. Android Developer Guide-a görə, ScaleXSpan simvolları eninə miqyaslayır, simvollararası intervalın dəyişməsini simulyasiya edir, lakin kerning cütlərinə birbaşa nəzarət vermir.
// XML düzənində
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text with kerning"
android:letterSpacing="0.05" />
// Kotlin-də proqramlı şəkildə
val textView = findViewById<TextView>(R.id.myTextView)
textView.letterSpacing = 0.05f
Məhdudiyyət: Android kerning cədvəllərini birbaşa dəstəkləmir — letterSpacing bütün simvollar üçün trekinq kimi işləyir. Android-də cüt kerningi üçün daxili kerning cədvəlləri olan şriftlərdən (OpenType GPOS feature kern) istifadə olunur. Dəstək ƏS versiyasından və render mühərrikindən asılıdır: Android 10+-da OpenType xüsusiyyətlərini tam dəstəkləyən Minikin, daha erkən versiyalarda isə məhdudiyyətləri olan HarfBuzz istifadə olunur. Tövsiyə: Android 8.0-dan aşağı cihazlarda kerningin göstərilməsini yoxlayın.
Vebdə kerning şriftin daxili kerning cədvəllərini aktivləşdirən və ya söndürən CSS xassəsi font-kerning vasitəsilə idarə olunur. Dəyərlər: auto (brauzer qərar verir), normal (kerning aktiv), none (kerning söndürülüb). Xassə 2016-cı ildən bütün müasir brauzerlər tərəfindən dəstəklənir. MDN Web Docs-a görə, font-kerning yalnız kerning cədvəli olan OpenType şriftlərinə tətbiq olunur.
CSS xassəsi letter-spacing — trekinqin analoqudur, lakin kerningə bənzər effektlər üçün də istifadə olunur. font-kerning-dən fərqli olaraq, letter-spacing kerning cütlərini nəzərə almadan bütün simvollar arasındakı intervalı bərabər dəyişir. Hər iki xassədən istifadə edərkən font-kerning birinci tətbiq olunur, sonra letter-spacing onun üzərinə bərabər yerdəyişmə əlavə edir.
/* Enable kerning for headings */
h1 {
font-kerning: normal;
letter-spacing: 0.02em;
}
/* Disable kerning for monospace */
code, pre {
font-kerning: none;
}
TypeScript utiliti kerningi nəzərə alaraq optimal letter-spacing-in hesablanması üçün Canvas API vasitəsilə şriftin kerning cədvəlini təhlil edə bilər. Lakin praktikada veb tərtibatçılar font-kerning: normal-a etibar edirlər — əksər hallarda optimal nəticə verir. Əlavə letter-spacing tənzimlənməsi yalnız dizayn vurğuları üçün tələb olunur — məsələn, böyük tipoqrafiyası olan landing səhifələrində.
Kerning incə tənzimləmə alətidir və onun düzgün tətbiq edilməməsi oxunuşluğu pisləşdirir. Birinci qayda: əsas mətn (body text) üçün kerningi dəyişməyin. Peşəkar şriftlərin kerning cədvəlləri artıq 12-16pt ölçüləri üçün optimal dəyərləri ehtiva edir. Əsas mətnin kerninginə müdaxilə qeyri-bərabərliyə və vizual səs-küyə səbəb olur.
İkinci qayda: 24pt-dən başlıqlar üçün müsbət kerning (fontdan asılı olaraq 0.5-1.5 pt) istifadə edin. Böyük mətn oxunuşluq üçün daha çox hərflərarası boşluq tələb edir. Aşağı x-height olan şriftlər (məsələn, Didot) yüksək x-height olan şriftlərdən (məsələn, Helvetica) daha çox kerning tələb edir. Test məlumatları: Apple Music iOS tətbiqində başlıqlar 0.8 pt kerning istifadə edir.
Üçüncü qayda: kerningi həmişə real sətirlərdə yoxlayın, test Lorem Ipsum-da deyil. Müxtəlif simvol kombinasiyaları fərqli vizual effekt verir. Çıxıntılı elementləri olan sait və samit cütlərinə xüsusi diqqət yetirin: AV, Te, To, Wa, LT. Mənfi kerningdə fi, fl, fj cütlərini izləyin — bəzi şriftlərdə liqatura olmadan birləşə bilərlər.
Əlçatanlıq aspekti: disleksiyası olan istifadəçilər kiçik müsbət kerning (0.3-0.5 pt) olan mətni daha yaxşı oxuyurlar. iOS və Android tətbiqin kerningini ləğv edə bilən əlçatanlıq parametrlərini dəstəkləyir. Dynamic Type ilə UIFontDescriptor istifadə edin və əlçatanlıq parametrlərində kerningi UIAccessibility vasitəsilə nəzərə alın. Vacib: sistem kerning parametrlərini bloklamayın — bu, WCAG 2.2 Guideline 1.4.12 mətn adaptasiyasını pozur.
Tez-tez verilən suallar
NSAttributedString-də .kern = 0 atributunu təyin edin. 0 dəyəri şriftin daxili cədvəlləri də daxil olmaqla bütün kerning cütlərini məcburi sıfırlayır. Bütün mətn səviyyəsində tam söndürmək üçün UILabel parametrlərində attributedText vasitəsilə .kern = 0 təyin edin.
Kerning simvollar arasındakı məsafəni dəyişir, formalarını dəyişməz qoyur. Liqatura iki və ya daha çox simvolu bir qrafik elementlə əvəz edir. Liqaturalar tez-tez kerningin arzuolunmaz birləşməni aradan qaldıra bilmədiyi yerlərdə tətbiq olunur — məsələn, fi cütü.
Bəli, Android 10-dan (API 29) etibarən OpenType GPOS feature kern-i tam dəstəkləyən Minikin render mühərriki istifadə olunur. Daha əvvəlki versiyalarda dəstək cihaz istehsalçısından və HarfBuzz versiyasından asılıdır. Bir neçə cihazda sınaqdan keçirmək tövsiyə olunur.
AVOWaToLt sətirindən istifadə edin — burada problemli kerning cütləri toplanıb. Vizual boşluqlar çılpaq gözlə görünürsə, şriftin kerning cədvəli aşağı keyfiyyətlidir. Peşəkar yoxlama üçün FontForge və ya Glyphs alətlərindən istifadə edin.
Bəli. UICollectionView-də kerning ilə NSAttributedString-in dinamik yenilənməsi zamanı simvol mövqelərinin yenidən hesablanması scroll zamanı FPS-i aşağı sala bilər. Uzun siyahılar üçün atributlaşdırılmış sətirləri keşləyin və ya standart parametrlərlə UILabel istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun