Baseline — shriftning barcha belgilari joylashadigan ko'rinmas gorizontal chiziq. Aksariyat harflar baseline ustida turadi, pastga chiqadigan elementlar (descenders) esa undan pastga tushadi. Mobil interfeyslarda baseline matnni boshqa elementlar — ikonkalar, tugmalar, tasvirlar bilan aniq tekislash uchun ishlatiladi. Material Design Typography Guidelines (2025) ma'lumotlariga ko'ra, baseline bo'yicha muvofiqlashtirilgan tekislash interfeysning vizual ierarxiyasini oshiradi va tarkibni skanerlashda kognitiv yukni kamaytiradi.
Asosiy fikrlar
Baseline (asosiy chiziq) — tipografiyaning asosiy tushunchasi bo'lib, shrift belgilari joylashadigan gorizontal o'qni belgilaydi. Raqamli shriftdagi har bir glif baseline ga bog'lanish nuqtasiga ega — harflar matn chizilganda aynan shu chiziq bo'ylab tekislanadi. Aksariyat kichik harflar (a, e, o, n, s) to'g'ridan-to'g'ri baseline ustida turadi, pastga chiqadigan elementlar (p, q, g, j harflarida) esa undan pastga tushadi.
Asosiy chiziq shrift metrikasidagi yagona yo'naltiruvchi emas. Undan tashqari quyidagilar ham mavjud: x-height (kichik harflarning balandligi), cap-height (katta harflarning balandligi), ascender-line (yuqoriga chiqadigan elementlar chizig'i) va descender-line (pastga chiqadigan elementlar chizig'i). Baseline va descender-line orasidagi masofa pastga chiqadigan elementni, baseline va ascender-line orasidagi masofa esa yuqoriga chiqadigan elementni belgilaydi. Aynan shu metrikalar qatorning to'liq balandligini shakllantiradi va line-height hisoblashiga ta'sir qiladi.
Bringhurst — The Elements of Typographic Style (2024) ma'lumotlariga ko'ra, baseline bir xil garnituraning barcha shriftlari uchun yagona universal metrikadir. X-height va cap-height bir naqshdan ikkinchisiga o'zgargan holda, baseline shriftning koordinata panjarasiga nisbatan barqaror pozitsiyasini saqlaydi. Bu baseline ni interfeyslarda elementlararo tekislash uchun ishonchli yo'naltiruvchiga aylantiradi.
Mobil interfeyslarda baseline matnni matn bo'lmagan elementlar bilan tekislash uchun tayanch chiziq sifatida ishlatiladi. Matn yonida ikonka, tugma yoki rasm joylashganda, ularni shunchaki markazga tekislash etarli emas — agar uning baseline i qo'shni komponentning markazi yoki baseline i bilan mos kelmasa, matn optik jihatdan siljigan ko'rinadi.
Odatiy stsenariy — sozlamalar yoki navigatsiya ro'yxatida ikonka va matn bo'lgan qator. Ikonka va matnni markazga tekislasangiz, matn vizual ravishda yuqorida ko'rinadi, chunki baseline konteynerning geometrik markazidan pastda joylashgan. Yechim — ikonkani matnning baseline iga tekislash. Material Design (2025) mobil ilovalarda matn va ikonkalari bo'lgan barcha aralash qatorlar uchun ushbu yondashuvni tavsiya qiladi.
| Stsenariy | Markazga tekislash | Baseline bo'yicha tekislash |
|---|---|---|
| Ikonka + matn | Matn ikonkadan yuqori ko'rinadi | Ikonka va matnning baseline i mos keladi |
| Matn + matn | Turli o'lchamlar titrash yaratadi | Baseline yagona, ierarxiya aniq |
| Matnli tugma | Matn markazdan siljigan | Matn optik markazlashgan |
| Sarlavha + taglavha | Qatorlarning vizual uzilishi | Qatorlar ritmik va bog'liq |
Baseline bo'yicha optik tekislash ayniqsa ekran shakllari uchun muhim: kiritish maydonlari, yorliqlar va xato xabarlari murakkab tipografik tarmoq hosil qiladi va baseline ning hatto 1–2 piksel siljishi idrokni sezilarli darajada yomonlashtiradi.
iOS ishlanmasida baseline Auto Layout dan SwiftUI layout tizimigacha bir necha mexanizm orqali qo'llab-quvvatlanadi. UIKit da matnni qo'shni elementlarga nisbatan joylashtirish uchun .firstBaseline va .lastBaseline atributlari bilan NSLayoutConstraint ishlatiladi. Birinchisi bir qatorli matn uchun, ikkinchisi — oxirgi qator muhim bo'lgan ko'p qatorli matn uchun mos keladi.
// UIKit: yorliq va ikonkani baseline bilan tekisla
let label = UILabel()
label.text = "Sozlamalar"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
SwiftUI da baseline bo'yicha tekislash maxsus AlignmentGuide orqali amalga oshiriladi. SwiftUI odatda elementlarni markazga tekislaydi, lekin ikonkalar bilan matn yorliqlari uchun baseline aniqroq natija beradi. SwiftUI o'rnatilgan VerticalAlignment.firstTextBaseline va .lastTextBaseline ni taqdim etadi.
// SwiftUI: HStack da baseline tekislash
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("Sozlamalar")
.font(.title3)
}
Apple HIG — Typography (2025) ma'lumotlariga ko'ra, SwiftUI da firstTextBaseline ishlatilishi markazga tekislash bilan solishtirganda qo'lda sozlashlar sonini 40% ga kamaytiradi. Bu, ayniqsa, shrift o'lchami foydalanuvchining imkoniyat sozlamalariga qarab o'zgaradigan dinamik tipdagi ro'yxatlarda sezilarli.
Baseline qiymatini shrift API si orqali olish mumkin. UIKit da UIFont.ascender xususiyati baseline dan qatorning yuqorisigacha bo'lgan masofani, UIFont.descender esa baseline dan pastgacha bo'lgan masofani (manfiy qiymat) qaytaradi. Ascender va descender ning leading bilan birgalikdagi yig'indisi qatorning to'liq balandligini beradi.
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // baseline dan yuqoriga qadar masofa
let descent = font.descender // manfiy, baseline dan pastda
let totalHeight = font.lineHeight // to'liq qator balandligi
Android ishlanmasida baseline ham klassik View tizimida, ham Jetpack Compose da qo'llab-quvvatlanadi. View tizimida baseline bo'yicha tekislash uchun ALIGN_BASELINE va ALIGN_TOP qoidalari bilan RelativeLayout.LayoutParams ishlatiladi. TextView uchun android:baselineAligned atributi mavjud bo'lib, u LinearLayout da matn elementlarining avtomatik tekislanishini boshqaradi.
<!-- Android XML: baseline alignment in LinearLayout -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:baselineAligned="true">
<TextView
android:id="@+id/label"
android:text="Price"
android:textSize="16sp" />
<TextView
android:id="@+id/value"
android:text="$24.99"
android:textSize="20sp"
android:layout_alignBaseline="@id/label" />
</LinearLayout>
Jetpack Compose da baseline bo'yicha tekislash Modifier.alignWithBaseline yoki maxsus layout larda AlignmentLine orqali amalga oshiriladi. Compose turli o'lchamdagi matn elementlarini tekislash uchun Column va Row da ishlatilishi mumkin bo'lgan o'rnatilgan FirstBaseline va LastBaseline ni taqdim etadi.
// Jetpack Compose: Modifier orqali baseline tekislash
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "Sozlamalar",
style = MaterialTheme.typography.titleMedium
)
}
Android Developers — Typography and Alignment (2025) ma'lumotlariga ko'ra, Jetpack Compose da baseline bo'yicha tekislash qo'lda padding yoki offset o'rnatish bilan solishtirganda UI testlarida matnning aniq joylashtirilishi bilan bog'liq xatolar sonini 30% ga kamaytiradi.
Flutter asosiy chiziq bilan ishlash uchun ikkita o'rnatilgan mexanizmni taqdim etadi: tipografik konventsiyani tanlash uchun TextBaseline enum (alphabetic yoki ideographic) va Row va Column da tekislash uchun CrossAxisAlignment.baseline. TextBaseline.alphabetic g'arb tipografikasiga, TextBaseline.ideographic esa Sharqiy Osiyo tipografikasiga mos keladi.
// Flutter: baseline tekislash
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('Sozlamalar', style: TextStyle(fontSize: 20)),
],
)
Aniq joylashtirish uchun Flutter shuningdek Baseline vidjetini taklif qiladi, u bola elementni shunday siljitadiki, uning baseline i konteynerning yuqorisidan belgilangan masofada bo'lsin. Bu nostandart tekislash bilan maxsus matn layout larini yaratishda foydalidir.
// Flutter: Baseline vidjeti
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'Tekislangan matn',
style: TextStyle(fontSize: 24),
),
)
Flutter Documentation — Layout and Typography (2025) ma'lumotlariga ko'ra, CrossAxisAlignment.baseline — Flutter da turli o'lchamdagi matnlarni qo'lda padding hisoblamasdan aniq tekislashning yagona usulidir. Bu, ayniqsa, sarlavha va taglavhalar aralashgan qatorlar uchun, masalan, narx va chegirma bilan mahsulot kartalarida muhim.
Eng keng tarqalgan xatolardan biri — ikonka yoki rasmlari bo'lgan qatorlarda matnni markazga tekislash. Ikonka va matn konteyner markaziga tekislanganda, matn vizual ravishda ikonkaga nisbatan yuqoriga siljiydi. Bu matnning markazi uning baseline idan yuqori bo'lishi, ikonka markazining esa geometrik markaz bilan mos kelishi sababli sodir bo'ladi.
NN Group — Typography in UI Design (2025) ma'lumotlariga ko'ra, baseline ni noto'g'ri tekislash foydalanuvchining ro'yxatni skanerlash vaqtini to'g'ri tekislangan interfeys bilan solishtirganda 22% ga oshiradi. Bu aksariyat mobil ilovalarning asosini tashkil etadigan ro'yxatlar va shakllar uchun muhim metrikadir.
Tez-tez beriladigan savollar
Baseline — belgilar joylashadigan gorizontal chiziq, line-height esa ikki ketma-ket qatorning asosiy chiziqlari orasidagi masofa. Baseline matnning vertikal makondagi o'rnini belgilaydi, line-height esa qatorlararo ritmni. Ikkala tushuncha o'zaro bog'liq: line-height bir qatorning baseline idan keyingi qatorning baseline iga qadar hisoblanadi.
UIKit da baseline qiymatini UILabel, UITextView va UIButton da lastBaselineAnchor yoki firstBaselineAnchor xususiyati orqali olish mumkin. Shrift metrikalariga to'g'ridan-to'g'ri kirish uchun UIFont.ascender (baseline dan yuqoriga qadar masofa) va UIFont.descender (baseline dan pastga qadar masofa, manfiy belgi bilan) dan foydalaning.
Ha, SwiftUI dinamik tiplar (Dynamic Type) bilan baseline alignment ni qo'llab-quvvatlaydi. .firstTextBaseline va .lastTextBaseline orqali tekislash avtomatik ravishda shrift o'lchami o'zgarishiga moslashadi. Bu qo'lda sozlash talab qilmasdan shrift o'lchami oshganda matnning to'g'ri joylashishini ta'minlaydi.
Jetpack Compose da Row ning verticalAlignment parametrida Alignment.FirstBaseline dan foydalaning: Row(verticalAlignment = Alignment.FirstBaseline). Ushbu Row da joylashtirilgan Icon va Text uchun Compose avtomatik ravishda ularning asosiy chiziqlarini birlashtiradi. Ikonkani aniqroq sozlash kerak bo'lsa, Modifier.alignWithBaseline dan foydalaning.
Maxsus shriftlarning o'z metrikalari bor: ascender, descender va x-height tizim shriftlaridan farq qilishi mumkin. Baseline alignment aniq natija bermasa, platforma API si orqali shrift metrikalarini tekshiring (iOS da UIFont.descender, Android da Paint.getFontMetrics()). Dekorativ shriftlar uchun 1–2 piksel qo'shimcha sozlash talab qilinishi mumkin.
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.