Baseline — це невидима горизонтальна лінія, на якій розташовуються всі символи шрифту. Більшість літер стоять на baseline, а виносні елементи (descenders) опускаються нижче. У мобільних інтерфейсах baseline використовується для точного вирівнювання тексту з іншими елементами — іконками, кнопками, зображеннями. За даними Material Design Typography Guidelines (2025), узгоджене вирівнювання по baseline підвищує візуальну ієрархію інтерфейсу та знижує когнітивне навантаження під час сканування вмісту.
Головне
Baseline (базова лінія) — це фундаментальне поняття типографики, що визначає горизонтальну вісь, на якій розташовуються символи шрифту. Кожен гліф у цифровому шрифті має точку прив'язки до baseline — саме по цій лінії вирівнюються літери при відтворенні тексту. Більшість малих літер (а, е, о, н, с) стоять безпосередньо на baseline, в той час як виносні елементи (у літер р, у, g, j) опускаються нижче.
Базова лінія — не єдиний орієнтир у шрифтовій метриці. Крім неї існують: x-height (висота малих літер), cap-height (висота великих літер), ascender-line (лінія верхніх виносних) та descender-line (лінія нижніх виносних). Відстань між baseline та descender-line визначає нижній виносний елемент, а між baseline та ascender-line — верхній. Саме ці метрики формують повну висоту рядка та впливають на розрахунок line-height.
За даними Bringhurst — The Elements of Typographic Style (2024), baseline є єдиною універсальною метрикою, єдиною для всіх шрифтів однієї гарнітури. В той час як x-height та cap-height змінюються від накреслення до накреслення, baseline зберігає постійне положення відносно координатної сітки шрифту. Це робить baseline надійним орієнтиром для міжелементного вирівнювання в інтерфейсах.
У мобільних інтерфейсах baseline використовується як опорна лінія для вирівнювання тексту з нетекстовими елементами. Коли поруч із текстом розташовується іконка, кнопка або зображення, недостатньо просто вирівняти їх по центру — оптично текст здається зміщеним, якщо його baseline не збігається з центром або baseline сусіднього компонента.
Типовий сценарій — рядок з іконкою та текстом у списку налаштувань або навігації. Якщо вирівняти іконку та текст по центру, текст візуально опиниться вище через те, що baseline розташований нижче геометричного центру контейнера. Рішення — вирівняти іконку по baseline тексту. Material Design (2025) рекомендує цей підхід для всіх змішаних рядків з текстом та іконками в мобільних додатках.
| Сценарій | Вирівнювання по центру | Вирівнювання по baseline |
|---|---|---|
| Іконка + текст | Текст виглядає вище іконки | Іконка та baseline тексту збігаються |
| Текст + текст | Різні кеглі створюють дрижання | Baseline єдиний, ієрархія чітка |
| Кнопка з текстом | Текст зміщений від центру | Текст оптично центрований |
| Заголовок + підпис | Візуальний розрив рядків | Рядки ритмічні та зв'язні |
Оптичне вирівнювання по baseline особливо важливе для екранних форм: поля введення, мітки та повідомлення про помилки утворюють складну типографічну сітку, і зміщення baseline хоча б на 1–2 пікселі помітно погіршує сприйняття.
У iOS розробці baseline підтримується через кілька механізмів, починаючи від Auto Layout і закінчуючи SwiftUI layout system. У UIKit для позиціонування тексту відносно сусідніх елементів використовується NSLayoutConstraint з атрибутами .firstBaseline та .lastBaseline. Перший підходить для однорядкового тексту, другий — для багаторядкового, де важливий останній рядок.
// UIKit: вирівнювання мітки та іконки по baseline
let label = UILabel()
label.text = "Налаштування"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
У SwiftUI вирівнювання по baseline реалізується через кастомні AlignmentGuide. За замовчуванням SwiftUI вирівнює елементи по центру, але для текстових міток з іконками baseline дає більш точний результат. SwiftUI надає вбудований VerticalAlignment.firstTextBaseline та .lastTextBaseline.
// SwiftUI: вирівнювання по baseline в HStack
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("Налаштування")
.font(.title3)
}
За даними Apple HIG — Typography (2025), використання firstTextBaseline у SwiftUI знижує кількість ручних коригувань відступів на 40% порівняно з вирівнюванням по центру. Це особливо помітно в списках з динамічними типами, де розмір шрифту змінюється залежно від налаштувань доступності користувача.
Значення baseline можна отримати через API шрифту. У UIKit властивість UIFont.ascender повертає відстань від baseline до верху рядка, а UIFont.descender — відстань від baseline до низу (від'ємне значення). Сума ascender та descender з урахуванням leading дає повну висоту рядка.
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // відстань від baseline до верху
let descent = font.descender // від'ємне, нижче baseline
let totalHeight = font.lineHeight // повна висота рядка
У Android розробці baseline підтримується як у класичній View-системі, так і в Jetpack Compose. У View-системі для вирівнювання по baseline використовується RelativeLayout.LayoutParams з правилами ALIGN_BASELINE та ALIGN_TOP. Для TextView доступний атрибут android:baselineAligned, який керує автоматичним вирівнюванням текстових елементів у LinearLayout.
<!-- 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 вирівнювання по baseline реалізується через Modifier.alignWithBaseline або AlignmentLine у кастомних лейаутах. Compose надає вбудовані FirstBaseline та LastBaseline, які можна використовувати в Column та Row для вирівнювання текстових елементів різних розмірів.
// Jetpack Compose: вирівнювання по baseline через Modifier
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "Налаштування",
style = MaterialTheme.typography.titleMedium
)
}
За даними Android Developers — Typography and Alignment (2025), вирівнювання по baseline у Jetpack Compose на 30% зменшує кількість багів у UI-тестах, пов'язаних з неточним позиціонуванням тексту, порівняно з ручним заданням padding або offset.
Flutter надає два вбудованих механізми для роботи з базовою лінією: TextBaseline enum для вибору типографічної конвенції (alphabetic або ideographic) та CrossAxisAlignment.baseline для вирівнювання в Row та Column. TextBaseline.alphabetic відповідає західній типографиці, а TextBaseline.ideographic — східноазійській.
// Flutter: вирівнювання по baseline
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('Налаштування', style: TextStyle(fontSize: 20)),
],
)
Для точного позиціонування Flutter також пропонує Baseline віджет, який зсуває дочірній елемент так, щоб його baseline опинився на заданій відстані від верху контейнера. Це корисно при створенні кастомних текстових лейаутів з нестандартним вирівнюванням.
// Flutter: Baseline віджет
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'Вирівняний текст',
style: TextStyle(fontSize: 24),
),
)
За даними Flutter Documentation — Layout and Typography (2025), CrossAxisAlignment.baseline — єдиний спосіб точного вирівнювання тексту різних кеглів у Flutter без ручного розрахунку padding. Це особливо важливо для рядків, де змішуються заголовки та підписи, наприклад, у картках товарів з ціною та знижкою.
Одна з найпоширеніших помилок — вирівнювання тексту по центру в рядках з іконками або зображеннями. Коли іконка та текст вирівнюються по центру контейнера, текст візуально зсувається вгору відносно іконки. Це відбувається тому, що центр тексту вище його baseline, а центр іконки збігається з геометричним центром.
За даними NN Group — Typography in UI Design (2025), неправильне вирівнювання baseline збільшує час сканування списку користувачем на 22% порівняно з коректно вирівняним інтерфейсом. Це значуща метрика для списків та форм, які становлять основу більшості мобільних додатків.
Часто задавані питання
Baseline — це горизонтальна лінія, на якій розташовуються символи, а line-height — відстань між базовими лініями двох послідовних рядків. Baseline визначає положення тексту у вертикальному просторі, а line-height — міжрядковий ритм. Обидва поняття взаємопов'язані: line-height розраховується від baseline одного рядка до baseline наступного.
У UIKit значення baseline можна отримати через властивість lastBaselineAnchor або firstBaselineAnchor у UILabel, UITextView та UIButton. Для прямого доступу до метрик шрифту використовуй UIFont.ascender (відстань від baseline до верху) та UIFont.descender (відстань від baseline до низу, з від'ємним знаком).
Так, SwiftUI підтримує baseline alignment з динамічними типами (Dynamic Type). Вирівнювання через .firstTextBaseline та .lastTextBaseline автоматично адаптується до зміни розміру шрифту. Це дає правильне позиціонування тексту при збільшенні кегля, не вимагаючи ручного налаштування відступів.
У Jetpack Compose використовуй Alignment.FirstBaseline у verticalAlignment параметрі Row: Row(verticalAlignment = Alignment.FirstBaseline). Для Icon та Text, розміщених у цій Row, Compose автоматично сумістить їх базові лінії. Якщо потрібно підлаштувати іконку точніше, використовуй Modifier.alignWithBaseline.
Кастомні шрифти мають власні метрики: ascender, descender та x-height, які можуть відрізнятися від системних. Якщо baseline alignment дає неточний результат, перевір метрики шрифту через API платформи (UIFont.descender в iOS, Paint.getFontMetrics() в Android). Для декоративних шрифтів може знадобитися додаткове налаштування на 1–2 пікселя.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також