Baseline — невидљива хоризонтална линија на којој се налазе сви знакови фонта. Већина слова стоји на baseline, а излазни елементи (descenders) спуштају се испод. У мобилним интерфејсима baseline се користи за прецизно поравнање текста са другим елементима — иконицама, дугмићима, сликама. Према Material Design Typography Guidelines (2025), усклађено поравнање на baseline побољшава визуелну хијерархију интерфејса и смањује когнитивно оптерећење при скенирању садржаја.
Главне тачке
Baseline (основна линија) — фундаментални појам типографије који дефинише хоризонталну осу на којој се налазе знакови фонта. Сваки глиф у дигиталном фонту има тачку везивања за baseline — слова се поравнавају управо на овој линији при приказивању текста. Већина малих слова (а, е, о, н, с) стоји директно на baseline, док се излазни елементи (код слова п, г, ј, ђ) спуштају испод.
Основна линија није једини оријентир у метрици фонта. Поред ње постоје: 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 система. У 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 у прилагођеним layout-има. 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-у смањује број грешака у UI тестовима везаних за непрецизно позиционирање текста за 30% у поређењу са ручним подешавањем 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 нађе на задатом растојању од врха контејнера. Ово је корисно при креирању прилагођених текстуалних layout-а са нестандардним поравнањем.
// 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође