Baseline у мобільній розробці: що це, значення та функції

Автор: IT Sectr Опубліковано: 2026-07-24 Час читання: 10 хв

Baseline — це невидима горизонтальна лінія, на якій розташовуються всі символи шрифту. Більшість літер стоять на baseline, а виносні елементи (descenders) опускаються нижче. У мобільних інтерфейсах baseline використовується для точного вирівнювання тексту з іншими елементами — іконками, кнопками, зображеннями. За даними Material Design Typography Guidelines (2025), узгоджене вирівнювання по baseline підвищує візуальну ієрархію інтерфейсу та знижує когнітивне навантаження під час сканування вмісту.

Головне

  • Baseline — уявна лінія, на якій стоять символи шрифту, крім виносних елементів.
  • Вирівнювання — baseline використовується для позиціонування тексту відносно сусідніх UI-компонентів.
  • Платформи — iOS надає NSLayoutConstraint для baseline, Android — Modifier.alignWithBaseline.
  • Багаторядковість — у багаторядкових заголовках baseline допомагає зберігати єдиний ритм рядків.
  • Консистентність — єдине вирівнювання по baseline покращує сприйняття інтерфейсу та знижує візуальний шум.

Що таке 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 розташований нижче геометричного центру контейнера. Рішення — вирівняти іконку по baseline тексту. Material Design (2025) рекомендує цей підхід для всіх змішаних рядків з текстом та іконками в мобільних додатках.

СценарійВирівнювання по центруВирівнювання по baseline
Іконка + текстТекст виглядає вище іконкиІконка та baseline тексту збігаються
Текст + текстРізні кеглі створюють дрижанняBaseline єдиний, ієрархія чітка
Кнопка з текстомТекст зміщений від центруТекст оптично центрований
Заголовок + підписВізуальний розрив рядківРядки ритмічні та зв'язні

Оптичне вирівнювання по baseline особливо важливе для екранних форм: поля введення, мітки та повідомлення про помилки утворюють складну типографічну сітку, і зміщення baseline хоча б на 1–2 пікселі помітно погіршує сприйняття.

Baseline на iOS: UIKit та SwiftUI

У iOS розробці baseline підтримується через кілька механізмів, починаючи від Auto Layout і закінчуючи SwiftUI layout system. У UIKit для позиціонування тексту відносно сусідніх елементів використовується NSLayoutConstraint з атрибутами .firstBaseline та .lastBaseline. Перший підходить для однорядкового тексту, другий — для багаторядкового, де важливий останній рядок.

swift
// 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.

swift
// SwiftUI: вирівнювання по baseline в HStack
HStack(alignment: .firstTextBaseline) {
    Image(systemName: "gear")
    Text("Налаштування")
        .font(.title3)
}

За даними Apple HIG — Typography (2025), використання firstTextBaseline у SwiftUI знижує кількість ручних коригувань відступів на 40% порівняно з вирівнюванням по центру. Це особливо помітно в списках з динамічними типами, де розмір шрифту змінюється залежно від налаштувань доступності користувача.

Отримання значення Baseline

Значення baseline можна отримати через API шрифту. У UIKit властивість UIFont.ascender повертає відстань від baseline до верху рядка, а UIFont.descender — відстань від baseline до низу (від'ємне значення). Сума ascender та descender з урахуванням leading дає повну висоту рядка.

swift
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // відстань від baseline до верху
let descent = font.descender // від'ємне, нижче baseline
let totalHeight = font.lineHeight // повна висота рядка

Baseline на Android: View-система та Compose

У Android розробці baseline підтримується як у класичній View-системі, так і в Jetpack Compose. У View-системі для вирівнювання по baseline використовується RelativeLayout.LayoutParams з правилами ALIGN_BASELINE та ALIGN_TOP. Для TextView доступний атрибут android:baselineAligned, який керує автоматичним вирівнюванням текстових елементів у LinearLayout.

xml
<!-- 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 для вирівнювання текстових елементів різних розмірів.

kotlin
// 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.

Baseline у Flutter: TextBaseline та alignWithBaseline

Flutter надає два вбудованих механізми для роботи з базовою лінією: TextBaseline enum для вибору типографічної конвенції (alphabetic або ideographic) та CrossAxisAlignment.baseline для вирівнювання в Row та Column. TextBaseline.alphabetic відповідає західній типографиці, а TextBaseline.ideographic — східноазійській.

dart
// Flutter: вирівнювання по baseline
Row(
    crossAxisAlignment: CrossAxisAlignment.baseline,
    textBaseline: TextBaseline.alphabetic,
    children: [
        Icon(Icons.settings),
        Text('Налаштування', style: TextStyle(fontSize: 20)),
    ],
)

Для точного позиціонування Flutter також пропонує Baseline віджет, який зсуває дочірній елемент так, щоб його baseline опинився на заданій відстані від верху контейнера. Це корисно при створенні кастомних текстових лейаутів з нестандартним вирівнюванням.

dart
// 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

Одна з найпоширеніших помилок — вирівнювання тексту по центру в рядках з іконками або зображеннями. Коли іконка та текст вирівнюються по центру контейнера, текст візуально зсувається вгору відносно іконки. Це відбувається тому, що центр тексту вище його baseline, а центр іконки збігається з геометричним центром.

  • Ігнорування baseline у багаторядкових списках — рядки з різними кеглями виглядають хаотично, якщо не використовувати baseline alignment. Рішення: завжди використовуй firstTextBaseline або lastTextBaseline для текстових колонок.
  • Змішування baseline та center alignment — якщо частина рядків вирівняна по baseline, а частина по центру, інтерфейс втрачає єдину типографічну сітку. Вибери один підхід для всього екрану.
  • Неправильна обробка RTL-локалей — для мов з письмом справа наліво (арабська, іврит) baseline alignment працює так само, як для LTR, але напрямок вирівнювання змінюється. Перевіряй розташування іконок відносно тексту в обох напрямках.
  • Забуті кастомні шрифти — стандартний baseline може відрізнятися від baseline кастомного шрифту. Завжди перевіряй метрики використовуваного шрифту через API платформи, особливо для декоративних гарнітур.

За даними NN Group — Typography in UI Design (2025), неправильне вирівнювання baseline збільшує час сканування списку користувачем на 22% порівняно з коректно вирівняним інтерфейсом. Це значуща метрика для списків та форм, які становлять основу більшості мобільних додатків.

Часто задавані питання

Чим Baseline відрізняється від line-height?

Baseline — це горизонтальна лінія, на якій розташовуються символи, а line-height — відстань між базовими лініями двох послідовних рядків. Baseline визначає положення тексту у вертикальному просторі, а line-height — міжрядковий ритм. Обидва поняття взаємопов'язані: line-height розраховується від baseline одного рядка до baseline наступного.

Як отримати значення Baseline через UIKit?

У UIKit значення baseline можна отримати через властивість lastBaselineAnchor або firstBaselineAnchor у UILabel, UITextView та UIButton. Для прямого доступу до метрик шрифту використовуй UIFont.ascender (відстань від baseline до верху) та UIFont.descender (відстань від baseline до низу, з від'ємним знаком).

Чи працює baseline alignment у SwiftUI з динамічними типами?

Так, SwiftUI підтримує baseline alignment з динамічними типами (Dynamic Type). Вирівнювання через .firstTextBaseline та .lastTextBaseline автоматично адаптується до зміни розміру шрифту. Це дає правильне позиціонування тексту при збільшенні кегля, не вимагаючи ручного налаштування відступів.

Як вирівняти текст з іконкою в Jetpack Compose?

У Jetpack Compose використовуй Alignment.FirstBaseline у verticalAlignment параметрі Row: Row(verticalAlignment = Alignment.FirstBaseline). Для Icon та Text, розміщених у цій Row, Compose автоматично сумістить їх базові лінії. Якщо потрібно підлаштувати іконку точніше, використовуй Modifier.alignWithBaseline.

Чому текст з кастомним шрифтом зміщується при вирівнюванні по baseline?

Кастомні шрифти мають власні метрики: ascender, descender та x-height, які можуть відрізнятися від системних. Якщо baseline alignment дає неточний результат, перевір метрики шрифту через API платформи (UIFont.descender в iOS, Paint.getFontMetrics() в Android). Для декоративних шрифтів може знадобитися додаткове налаштування на 1–2 пікселя.

Підсумки

  • Baseline — базова лінія шрифту, єдиний орієнтир для всіх символів та ключова метрика вирівнювання тексту в інтерфейсах.
  • Вирівнювання по baseline — стандартний підхід для рядків з іконками, кнопками та текстом різних кеглів, рекомендований Material Design та Apple HIG.
  • iOS — NSLayoutConstraint з firstBaselineAnchor/lastBaselineAnchor у UIKit та firstTextBaseline у SwiftUI.
  • Android — ALIGN_BASELINE у View-системі та Alignment.FirstBaseline у Jetpack Compose.
  • Flutter — CrossAxisAlignment.baseline з TextBaseline.alphabetic та окремий Baseline widget.
  • Кастомні шрифти — завжди перевіряй їх метрики через API платформи, оскільки baseline може відрізнятися від системного.
  • Вплив на UX — коректне вирівнювання по baseline скорочує час сканування інтерфейсу на 22% (NN Group, 2025) та зменшує кількість UI-багів.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також