Leading (liding) — bu qo'shni matn qatorlarining tayanch chiziqlari orasidagi masofa bo'lib, u to'g'ridan-to'g'ri o'qish qulayligini belgilaydi. Bu atama fizik tipografik harflardan kelib chiqqan: qatorlar orasiga intervalni oshirish uchun qo'rg'oshin tasmalari (lead strips) qo'yilgan. Zamonaviy mobil ishlanmada leading iOS'da NSAttributedString orqali lineSpacing va lineHeightMultiple, Android'da esa TextView orqali lineSpacing yordamida amalga oshiriladi. Apple NSMutableParagraphStyle Hujjatlariga ko'ra, qatorlararo masofa nuqtalarda belgilanadi va qator balandligi ko'paytiruvchisi bilan birlashtirilishi mumkin.
Asosiy
Leading (talaffuzi „liding”) — tipografiyada qo'shni qatorlarning tayanch chiziqlari orasidagi vertikal masofa. Tayanch chizig'i — matn belgilari joylashgan ko'rinmas chiziq. Leading qanchalik katta bo'lsa, qatorlar bir-biriga nisbatan shunchalik erkin joylashadi. Raqamli tipografiyada leading ko'pincha qatorlararo masofa yoki qator balandligi deb ataladi.
Tarixan, bu atama metall tipografiya davrida paydo bo'lgan: teruvchilar qatorlar orasiga intervalni oshirish uchun yupqa qo'rg'oshin tasmalarini qo'yishgan. Zamonaviy shriftlarda leading shrift o'lchamiga nisbat sifatida belgilanadi. Tizimning standart qiymati 1.2 (shrift o'lchamining 120%) ni tashkil qiladi, ammo uzun matnlar va mobil interfeyslar uchun kattaroq qiymat tavsiya etiladi. Material Design Typography yo'riqnomasiga ko'ra, veb va mobil interfeyslar uchun optimal qator balandligi asosiy matn uchun 1.4-1.5 ni tashkil qiladi.
Leading va line spacing o'rtasidagi farq: leading — tayanch chizig'idan tayanch chizig'igacha bo'lgan to'liq masofa, line spacing — bir qatorning pastki chegarasi bilan keyingi qatorning yuqori chegarasi orasidagi masofa. Ko'pgina mobil API'larda (iOS NSParagraphStyle, Android TextView) aynan line spacing qatorning tabiiy balandligi ustiga qo'shimcha masofa sifatida ishlatiladi. Umumiy qatorlararo masofani hisoblashda buni hisobga olish muhim.
Optimal leadingni tanlash bir necha omillarga bog'liq: shrift o'lchami, qator uzunligi, foydalanish konteksti va auditoriya. Qator uzunligi 40-60 belgi bo'lgan tipik mobil interfeyslar uchun shrift o'lchamidan 1.4 dan 1.6 gacha leading tavsiya etiladi. Qisqa qatorlar (yorliqlar, tugmalar) kichikroq leading — 1.0-1.2 ishlatishi mumkin. Uzun matnlar (maqolalar, tavsiflar) — maksimal o'qilish uchun 1.8 gacha kattaroq leading.
Eksperimental ma'lumotlar: Wichita State University Software Usability Laboratory tadqiqoti shuni ko'rsatdiki, leading 1.5 bir xil qator kengligida leading 1.0 bilan solishtirganda o'qish tezligini 7.5% ga oshiradi. Disleksiyasi bo'lgan foydalanuvchilar uchun optimal leading undan ham yuqori — 1.8 gacha. Ushbu ma'lumotlar WCAG 2.2 tavsiyalari bilan tasdiqlanadi, ular tarkibni yo'qotmasdan qatorlararo masofani 1.5 gacha oshirish imkoniyatini talab qiladi.
Shriftning ta'siri: yuqori x-height (kichik harflarning nisbiy balandligi) bo'lgan shriftlar past x-height bo'lgan shriftlardan kattaroq leading talab qiladi. Misol uchun, Helvetica (yuqori x-height) body text uchun leading 1.5, Didot (past x-height) esa 1.3 ni tavsiya qiladi. Buning sababi shundaki, yuqori x-height da bir xil qatorlararo masofada qatorlar vizual tarzda tezroq birlashadi.
| Kontekst | Tavsiya etilgan leading | iOS namunasi |
|---|---|---|
| Sarlavhalar (24-36pt) | 1.0 — 1.2 | lineHeightMultiple: 1.1 |
| Asosiy matn (14-18pt) | 1.4 — 1.6 | lineHeightMultiple: 1.5 |
| Kichik matn (10-13pt) | 1.3 — 1.5 | lineHeightMultiple: 1.4 |
| Maqolalar va uzun tarkib | 1.5 — 1.8 | lineHeightMultiple: 1.6 |
| Accessibility (disleksiya) | 1.6 — 2.0 | lineHeightMultiple: 1.8 |
iOS'da qatorlararo masofa NSMutableParagraphStyle sinfi orqali boshqariladi, u ikkita asosiy xususiyatga ega: lineSpacing (nuqtalarda qatorlar orasidagi qo'shimcha masofa) va lineHeightMultiple (qator balandligi ko'paytiruvchisi). Bu xususiyatlar birgalikda ishlaydi: umumiy qator balandligi shriftning tabiiy balandligi lineHeightMultiple ga ko'paytirilgan va lineSpacing qo'shilgan holda hisoblanadi.
let paragraphStyle = NSMutableParagraphStyle()
// 1-usul: qator balandligi ko'paytiruvchisi
paragraphStyle.lineHeightMultiple = 1.5
// 2-usul: qatorlar orasidagi qo'shimcha masofa
paragraphStyle.lineSpacing = 4.0
// NSAttributedString orqali qo'llang
let attributedText = NSAttributedString(
string: "Text with custom line spacing",
attributes: [
.paragraphStyle: paragraphStyle
]
)
lineHeightMultiple — afzal qilingan usul, chunki shrift o'lchami o'zgarganda avtomatik ravishda masshtablanadi. lineSpacing mutlaq nuqtalarda belgilanadi va masshtablanmaydi, bu Dynamic Type ishlatilganda nomuvofiqlikka olib kelishi mumkin. Apple Text Programming Guide'ga ko'ra, accessibility bilan mos keladigan interfeyslar uchun lineHeightMultiple ni UIFontMetrics bilan birgalikda ishlating.
SwiftUI Text va VStack uchun .lineSpacing() modifikatorini taqdim etadi. UIKit'dan farqli o'laroq, SwiftUI'da qatorlararo masofa nuqtalarda belgilanadi va o'rnatilgan ko'paytiruvchiga ega emas. Ko'paytiruvchini amalga oshirish uchun dasturchi shrift o'lchamiga asoslanib qatorlararo masofani qo'lda hisoblashi kerak. Cheklov: SwiftUI to'g'ridan-to'g'ri lineHeightMultiple ni qo'llab-quvvatlamaydi — hisoblangan qiymat bilan .lineSpacing(CGFloat) dan foydalaning.
struct LeadingTextView: View {
let fontSize: CGFloat = 17
var lineSpacing: CGFloat {
fontSize * 0.5 // Shrift o'lchamining 50%
}
var body: some View {
Text("Qator oralig'i")
Text("1.5 ko'paytiruvchisi")
.lineSpacing(lineSpacing)
.font(.system(size: fontSize))
}
}
Android'da qatorlararo masofa ikkita TextView atributi orqali belgilanadi: lineSpacingExtra (px da qo'shimcha masofa) va lineSpacingMultiplier (qator balandligi ko'paytiruvchisi, standart 1.0). iOS'ga o'xshab, ko'paytiruvchi shrift o'lchami o'zgarganda masshtablanadi, extra esa mutlaq qiymatdir. Accessibility bilan mos keladigan interfeyslar uchun ko'paytiruvchidan foydalanish afzalroq.
// XML tartibida
<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'da dasturiy
val textView = findViewById<TextView>(R.id.contentText)
textView.setLineSpacing(
TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
4f,
resources.displayMetrics
),
1.5f
)
Compose — zamonaviy Android UI framework'i — TextStyle modifikatorida lineHeight parametridan foydalanadi. XML yondashuvidan farqli o'laroq, Compose'da lineHeight sp da to'liq qator balandligi sifatida belgilanadi (standart = fontSize * 1.2). Ko'paytiruvchini o'rnatish uchun dasturchi lineHeight ni fontSize foizi sifatida ko'rsatadi: Misol: TextStyle(fontSize = 16.sp, lineHeight = 24.sp) 1.5 ko'paytiruvchini beradi.
Cheklov: Android'da API 28 dan oldin lineSpacingExtra va lineSpacingMultiplier ba'zi shriftlar bilan, ayniqsa maxsus (TTF/OTF) shriftlar bilan to'g'ri ishlamaydi. Haqiqiy qurilmalarda sinovdan o'tkazish va systemTextView standart ravishda qo'shimcha masofasiz lineSpacingMultiplier 1.0 ishlatishini hisobga olish tavsiya etiladi. ScrollView'dagi uzun matnlar uchun qatorlararo masofani aniq belgilash shart.
Vebda qatorlararo masofa line-height CSS xususiyati bilan belgilanadi, u son (ko'paytiruvchi), foiz qiymati, uzunlik birliklari (px, em) yoki normal kalit so'zi bo'lishi mumkin. Sonli ko'paytiruvchi — afzal qilingan usul, chunki u meros qilib olinadi va bola elementlarning shrift o'lchamiga nisbatan masshtablanadi. Normal qiymati ko'pchilik shriftlar uchun taxminan 1.2 ga to'g'ri keladi.
/* 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;
}
Sonli ko'paytiruvchi vs em: line-height: 1.5 va line-height: 1.5em turli narsalar. Sonli ko'paytiruvchi computed value sifatida meros qilib olinadi va har bir bola element uchun uning font-size asosida qayta hisoblanadi. Em ota-onaning font-size asosida qat'iy computed value sifatida meros qilib olinadi. Bu muhim farq: font-size: 20px font-size: 16px ichiga joylashtirilganda, line-height: 1.5 30px, line-height: 1.5em esa 24px (ota-onadan) beradi. Tavsiya: har doim sonli ko'paytiruvchidan foydalaning.
Turli API'larga qaramay, qatorlararo masofani sozlash printsipi barcha platformalarda bir xil. Ko'paytiruvchi (multiplier) shrift o'lchami o'zgarganda masshtablanadi va accessibility uchun qulay. Mutlaq qiymat (spacing) masshtablanmaydi va Dynamic Type yoki katta matn sozlamalaridan foydalanilganda muammolarga olib kelishi mumkin.
Cross-platform strategiya: dizayn tizimida lineHeight ni fontSize ko'paytiruvchisi sifatida belgilang. Masalan, dizayn tokenlarida: line-height-body = 1.5, line-height-heading = 1.1. Har bir platforma bu ko'paytiruvchini o'z API si bilan amalga oshiradi: iOS — lineHeightMultiple, Android — lineSpacingMultiplier, Web — line-height: 1.5. Bu barcha platformalarda bir xil vizual natijani kafolatlaydi.
| Platforma | Ko'paytiruvchi API | Masofa API |
|---|---|---|
| iOS UIKit | NSParagraphStyle.lineHeightMultiple | NSParagraphStyle.lineSpacing |
| iOS SwiftUI | .lineSpacing (qo'lda hisoblash) | .lineSpacing(CGFloat) |
| Android XML | android:lineSpacingMultiplier | android:lineSpacingExtra |
| Android Compose | TextStyle.lineHeight (sp da) | TextStyle.lineHeight |
| Web CSS | line-height: {son} | line-height: {px/em} |
Muhim nuance: iOS'da lineHeightMultiple qatorning to'liq balandligiga (shriftning ascender + descender ni o'z ichiga olgan holda) qo'llaniladi, Android'da esa lineSpacingMultiplier — Minikin render dvigateli tomonidan hisoblangan qator balandligiga. Amalda bu bir xil ko'paytiruvchi qiymatida vizual leadingda kichik farqlarga olib keladi. Pixel-perfect moslik uchun platformaga qarab tuzatilgan mutlaq qiymatlardan foydalaning.
Tez-tez beriladigan savollar
Leading — bir qatorning tayanch chizig'idan keyingi qatorning tayanch chizig'igacha bo'lgan to'liq masofa. Line spacing — qatorlar orasiga qatorning tabiiy balandligiga qo'shiladigan qo'shimcha masofa. iOS'da lineSpacing aynan qo'shimcha masofa, to'liq balandlik emas.
WCAG 2.2 ga moslashish uchun asosiy matn uchun line-height 1.5 dan foydalaning. Disleksiyasi va ko'rish buzilishi bo'lgan foydalanuvchilar leading 1.6 dan 1.8 gacha bo'lgan matnni yaxshiroq o'qiydilar. Foydalanuvchi tarkibni yo'qotmasdan qatorlararo masofani oshirishi mumkinligiga ishonch hosil qiling.
SwiftUI o'zining render dvigatelidan foydalanadi, bu erda lineSpacing o'rnatilgan ko'paytiruvchisiz nuqtalarda qatorlar orasidagi masofadir. UIKitda lineHeightMultiple shrift o'lchami bilan masshtablanadi. Bir xillik uchun SwiftUI'da 1.5 ko'paytiruvchisi uchun lineSpacing ni fontSize * 0.5 sifatida hisoblang.
FPS ga to'g'ridan-to'g'ri ta'sir yo'q, lekin kattaroq leading tarkib balandligini va shunga mos ravishda UICollectionView/RecyclerView'dagi katakchalar sonini oshiradi, bu bilvosita samaradorlikka ta'sir qiladi. Minglab elementli ro'yxatlar uchun dizayn tizimida leading ni optimallashtiring.
Formuladan foydalaning: line-height = font-size + (font-size * multiplier). 1.5 ko'paytiruvchisi bo'lgan 16pt shrift uchun: 16 + (16 * 0.5) = 24pt. Haqiqiy matn ustida vizual tekshiring — turli shriftlar individual sozlashni talab qiladi.
Xulosalar
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.