Leading (lidinq) — bu, qonşu mətn sətirlərinin baza xətləri arasındakı məsafədir və oxu rahatlığını birbaşa müyyənləşdirir. Termin fiziki tipoqrafik hərflərdən yaranıb: sətirlər arasına intervalı artırmaq üçün qurğuşun zolaqlar (lead strips) qoyulurdu. Müasir mobil inkişafda leading iOS-da NSAttributedString vasitəsilə lineSpacing və lineHeightMultiple, Android-də isə TextView-də lineSpacing vasitəsilə húyata keçirilir. Apple NSMutableParagraphStyle Sənədləri-nə görə, sətirlərarası məsafə ballarla müyyənlęşdirilir və sətir hündurlüyü çarpanı ilə birləşdirilə bilər.
Başlıca
Leading (tələffüzü „lidinq”) — tipoqrafikada qonşu sətirlərin baza xətləri arasındakı şaquli məsafədir. Baza xətti — mətn simvollarının yerləşdiyi görünməz xəttdir. Leading nə qədər böyükdürssə, sətirlər bir-birinə nisbətən bir o qədər sərbəst yerləşir. Rəqəmsal tipoqrafikada leading çox vaxt sətirlərarası məsafə və ya sətir hündurlüyü adlanır.
Tarixən termin metal tipoqrafiya dövründə yaranıb: dizaynerlər intervalı artırmaq üçün sətirlər arasına nazik qurğuşun zolaqlar qoyurdular. Müasir şriftlərdə leading şrift ölçüsünə nisbət kimi müyyənləşdirilir. Sistem dəyəri standart olaraq 1.2 (şrift ölçüsünün 120%) təşkil edir, lakin uzun mətnlər və mobil interfeyslər üçün daha böyük dəyər tövsiyə olunur. Material Design Typography Təlimatlarına görə, veb və mobil interfeyslər üçün optimal sətir hündurlüyü əsas mətn üçün 1.4-1.5 təşkil edir.
Leading və line spacing arasındakı fərq: leading — baza xəttindən baza xəttinə qədər tam məsafə, line spacing — bir sətrin aşağı sərhəddi ilə növbəti sətrin yuxarı sərhəddi arasındakı məsafədir. Əksər mobil API-lərdə (iOS NSParagraphStyle, Android TextView) sətrin təbii hündurlüyü üstərinə əlavə məsafə kimi məhz line spacing istifadə olunur. Ümumi sətirlərarası məsafəni hesablayarkən bunu nəzərə almaq vacibdir.
Optimal leading-in seçilməsi bir neçə amildən asılıdır: şrift ölçüsü, sətir uzunluğu, istifadə konteksti və auditoriya. Sətir uzunluğu 40-60 simvol olan tipik mobil interfeyslər üçün şrift ölçüsündən 1.4-dən 1.6-dək leading tövsiyə olunur. Qısa sətirlər (etiketlər, dümələr) daha kiçik leading istifadə edə bilər — 1.0-1.2. Uzun mətnlər (məqalələr, təsvirlər) — maksimum oxunaqlılıq üçün 1.8-dək böyük leading.
Eksperimental məlumatlar: Wichita State University Software Usability Laboratory tərəfindən aparılan tədqiqat göstərdi ki, leading 1.5 eyni sətir genişliyində leading 1.0 ilə müqayisədə oxu sürətini 7.5% artırır. Disleksiyası olan istifadəçilər üçün optimal leading daha yüksəkdir — 1.8-dək. Bu məlumatlar WCAG 2.2 tövsiyələri ilə təsdiqlənir və məzmun itkisi olmadan sətirlərarası məsafənin 1.5-dək artırılmasını tələb edir.
Şriftin təsiri: yüksək x-height (kiçik hərflərin nisbi hündurlüyü) olan şriftlər aşağı x-height olan şriftlərdən daha böyük leading tələb edir. Məsələn, Helvetica (yüksək x-height) bədən mətni üçün leading 1.5, Didot (aşağı x-height) isə 1.3 tövsiyə edir. Bu onunla əlaqəlidir ki, yüksək x-height-də eyni sətirlərarası məsafədə sətirlər vizual olaraq daha tez birləşir.
| Kontekst | Tövsiyə olunan leading | iOS nümunəsi |
|---|---|---|
| Başlıqlar (24-36pt) | 1.0 — 1.2 | lineHeightMultiple: 1.1 |
| Əsas mətn (14-18pt) | 1.4 — 1.6 | lineHeightMultiple: 1.5 |
| Kiçik mətn (10-13pt) | 1.3 — 1.5 | lineHeightMultiple: 1.4 |
| Məqalələr və uzun mətnlər | 1.5 — 1.8 | lineHeightMultiple: 1.6 |
| Accessibility (disleksiya) | 1.6 — 2.0 | lineHeightMultiple: 1.8 |
iOS-da sətirlərarası məsafə NSMutableParagraphStyle sinfi vasitəsilə idarə olunur, bu sinif iki əsas xüsusiyyətə malikdir: lineSpacing (ballarla sətirlər arasında əlavə məsafə) və lineHeightMultiple (sətir hündurlüyü çarpanı). Bu xüsusiyyətlər birlikdə işləyir: ümumi sətir hündurlüyü şriftin təbii hündurlüyü ilə lineHeightMultiple hasili üstəlik lineSpacing kimi hesablanır.
let paragraphStyle = NSMutableParagraphStyle()
// Metod 1: sətir hündurlüyü çarpanı
paragraphStyle.lineHeightMultiple = 1.5
// Metod 2: sətirlər arasında əlavə məsafə
paragraphStyle.lineSpacing = 4.0
// NSAttributedString vasitəsilə tətbiq edin
let attributedText = NSAttributedString(
string: "Text with custom line spacing",
attributes: [
.paragraphStyle: paragraphStyle
]
)
lineHeightMultiple — üstünlük verilən üsul, çünki şrift ölçüsü dəyişəndə avtomatik miqyaslanır. lineSpacing mütləq ballarla müyyənləşdirilir və miqyaslanmır, bu Dynamic Type istifadə edərkən uyğunsuzluğa səbəb ola bilər. Apple Text Programming Guide-a görə, accessibility uyğun interfeyslər üçün lineHeightMultiple-i UIFontMetrics ilə birlikdə istifadə edin.
SwiftUI Text və VStack üçün .lineSpacing() modifikatorunu təqdim edir. UIKit-dən fərqli olaraq, SwiftUI-də sətirlərarası məsafə nöqtələrlə müyyənləşdirilir və daxili çarpana malik deyil. Çarpanı tətbiq etmək üçün tərtibatçı şrift ölçüsünə əsasən sətirlərarası məsafəni əl ilə hesablamalıdır. Məhdudiyyət: SwiftUI birbaşa lineHeightMultiple dəstəkləmir — hesablanmış dəyərlə .lineSpacing(CGFloat) istifadə edin.
struct LeadingTextView: View {
let fontSize: CGFloat = 17
var lineSpacing: CGFloat {
fontSize * 0.5 // Şrift ölçüsünün 50%-i
}
var body: some View {
Text("Sətirlərarası məsafə")
Text("1.5 çarpanı")
.lineSpacing(lineSpacing)
.font(.system(size: fontSize))
}
}
Android-də sətirlərarası məsafə iki TextView atributu vasitəsilə müyyənləşdirilir: lineSpacingExtra (px ilə əlavə məsafə) və lineSpacingMultiplier (sətir hündurlüyü çarpanı, standart 1.0). iOS-a bənzər şəkildə, çarpan şrift ölçüsü dəyişəndə miqyaslanır, extra isə mütləq dəyərdir. Accessibility uyğun interfeyslər üçün çarpandan istifadə etmək daha üstünlükdür.
// XML tərtibində
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text with line spacing"
android:lineSpacingExtra="4dp"
android:lineSpacingMultiplier="1.5"
android:textSize="16sp" />
// Kotlin-də proqramlaşdırma ilə
val textView = findViewById<TextView>(R.id.contentText)
textView.setLineSpacing(
TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
4f,
resources.displayMetrics
),
1.5f
)
Compose — müasir Android UI çərçivəsi — TextStyle modifikatorunda lineHeight parametrindən istifadə edir. XML yanaşmasından fərqli olaraq, Compose-də lineHeight sp ilə tam sətir hündurlüyü kimi müyyənləşdirilir (standart = fontSize * 1.2). Çarpanı təyin etmək üçün tərtibatçı lineHeight-i fontSize faizi kimi göstərir: Nümunə: TextStyle(fontSize = 16.sp, lineHeight = 24.sp) çarpanı 1.5 verir.
Məhdudiyyət: Android-də API 28-dən əvvəl lineSpacingExtra və lineSpacingMultiplier bəzi şriftlərlə, xüsusilə özəl (TTF/OTF) şriftlərlə düzgün işləmir. Real cihazlarda sınaqdan keçirmək və systemTextView-in standart olaraq əlavə məsafə olmadan lineSpacingMultiplier 1.0 istifadə etdiyini nəzərə almaq tövsiyə olunur. ScrollView-də uzun mətnlər üçün sətirlərarası məsafəni açıq şəkildə təyin etmək lazımdır.
Vebdə sətirlərarası məsafə line-height CSS xüsusiyyəti ilə müyyənləşdirilir, bu rəqəm (çarpan), faiz dəyəri, uzunluq vahidləri (px, em) və ya normal açar sözü ola bilər. Rəqəmsal çarpan — üstünlük verilən üsul, çünki miras alınır və uşaq elementlərin şrift ölçüsünə nisbətən miqyaslanır. Normal dəyəri əksər şriftlər üçün təxminən 1.2-yə uyğun gəlir.
/* Numerical multiplier (recommended) */
body {
font-size: 16px;
line-height: 1.5;
}
/* Percentage value */
.article-content {
line-height: 150%;
}
/* Fixed value (does not scale) */
.small-text {
font-size: 12px;
line-height: 18px;
}
Rəqəmsal çarpan vs em: line-height: 1.5 və line-height: 1.5em fərqli şeydir. Rəqəmsal çarpan computed dəyər kimi miras alınır və hər uşaq element üçün onun font-size əsasında yenidən hesablanır. em valideynin font-size əsasında sabit computed dəyər kimi miras alınır. Bu kritik fərqdir: font-size: 20px font-size: 16px daxilində yerləşdirildikdə, line-height: 1.5 30px, line-height: 1.5em isə 24px (valideyndən) verir. Tövsiyə: həmişə rəqəmsal çarpandan istifadə edin.
Fərqli API-lərə baxmayaraq, sətirlərarası məsafənin konfiqurasiya prinsipi bütün platformalarda eynidir. Çarpan (multiplier) şrift ölçüsü dəyişəndə miqyaslanır və accessibility üçün əlverişlidir. Mütləq dəyər (spacing) miqyaslanmır və Dynamic Type və ya böyük mətn parametrlərindən istifadə edərkən problemlərə səbəb ola bilər.
Cross-platform strategiya: dizayn sistemində lineHeight-i fontSize çarpanı kimi təyin edin. Məsələn, dizayn tokenlərində: line-height-body = 1.5, line-height-heading = 1.1. Hər platforma bu çarpanı öz API-si ilə hüyata keçirir: iOS — lineHeightMultiple, Android — lineSpacingMultiplier, Web — line-height: 1.5. Bu, bütün platformalarda eyni vizual nəticəyə zəmanət verir.
| Platforma | Çarpan API-si | Məsafə API-si |
|---|---|---|
| iOS UIKit | NSParagraphStyle.lineHeightMultiple | NSParagraphStyle.lineSpacing |
| iOS SwiftUI | .lineSpacing (əl ilə hesablama) | .lineSpacing(CGFloat) |
| Android XML | android:lineSpacingMultiplier | android:lineSpacingExtra |
| Android Compose | TextStyle.lineHeight (sp ilə) | TextStyle.lineHeight |
| Web CSS | line-height: {rəqəm} | line-height: {px/em} |
Vacib nüans: iOS-da lineHeightMultiple sətrin tam hündurlüyünə (şriftin ascender + descender daxil olmaqla) tətbiq edilir, Android-də isə lineSpacingMultiplier — Minikin render mühərriki tərəfindən hesablanmış sətir hündurlüyünə. Təcrübədə bu, eyni çarpan dəyərində vizual leading-də kiçik fərqlərə səbəb olur. Pixel-perfect uyğunluq üçün platforma üzrə düzəliş ilə mütləq dəyərlərdən istifadə edin.
Tez-tez verilən suallar
Leading — bir sətrin baza xəttindən növbəti sətrin baza xəttinə qədər olan tam məsafə. Line spacing — sətrlər arasında sətrin təbii hündurlüyünə əlavə edilən əlavə məsafə. iOS-da lineSpacing tam hündurlüy deyil, məhz əlavə məsafədir.
WCAG 2.2-yə uyğunluq üçün əsas mətn üçün line-height 1.5 istifadə edin. Disleksiyası və görmə pozuntusu olan istifadəçilər leading 1.6-dan 1.8-dək olan mətnləri daha yaxşı oxuyurlar. İstifadəçinin məzmun itkisi olmadan sətirlərarası məsafəni artıra bildiyinə əmin olun.
SwiftUI öz render mühərrikindən istifadə edir, burada lineSpacing daxili çarpan olmadan nöqtələrlə sətirlər arası məsafədir. UIKit-də lineHeightMultiple şrift ölçüsü ilə miqyaslanır. Vahidlik üçün SwiftUI-də lineSpacing-i 1.5 çarpanı üçün fontSize * 0.5 kimi hesablayın.
Birbaşa FPS təsiri yoxdur, lakin böyük leading məzmun hündurlüyünü artırır və müvafiq olaraq UICollectionView/RecyclerView-də hücrələrin sayını artırır, bu da dolayısı ilə performansa təsir edir. Minlərlə elementi olan siyahılar üçün dizayn sistemində leading-i optimallaşdırın.
Düsturdan istifadə edin: line-height = font-size + (font-size * multiplier). Çarpan 1.5 olan 16pt şrift üçün: 16 + (16 * 0.5) = 24pt. Real mətn üzərində vizual yoxlayın — müxtəlif şriftlər fərdi konfiqurasiya tələb edir.
Nəticələr
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