Baseline — este o linie orizontală invizibilă pe care sunt așezate toate caracterele fontului. Majoritatea literelor stau pe baseline, iar elementele descendente (descenders) coboară mai jos. În interfețele mobile, baseline este utilizat pentru alinierea precisă a textului cu alte elemente — pictograme, butoane, imagini. Conform Material Design Typography Guidelines (2025), alinierea coerentă pe baseline îmbunătățește ierarhia vizuală a interfeței și reduce încărcarea cognitivă la scanarea conținutului.
Principalele puncte
Baseline (linia de bază) — este un concept fundamental al tipografiei care definește axa orizontală pe care sunt așezate caracterele fontului. Fiecare glif dintr-un font digital are un punct de ancorare pe baseline — literele sunt aliniate exact pe această linie la redarea textului. Majoritatea literelor mici (a, e, o, n, s) stau direct pe baseline, în timp ce elementele descendente (la literele p, q, g, j) coboară mai jos.
Linia de bază nu este singurul reper în metrica fontului. Pe lângă aceasta, există: x-height (înălțimea literelor mici), cap-height (înălțimea literelor mari), ascender-line (linia elementelor ascendente) și descender-line (linia elementelor descendente). Distanța dintre baseline și descender-line determină elementul descendent, iar distanța dintre baseline și ascender-line — elementul ascendent. Aceste metrici formează înălțimea completă a rândului și influențează calculul line-height.
Conform Bringhurst — The Elements of Typographic Style (2024), baseline este singura metrică universală, comună pentru toate fonturile aceleiași familii. În timp ce x-height și cap-height se schimbă de la o variantă la alta, baseline își păstrează poziția constantă față de grila de coordonate a fontului. Aceasta face din baseline un reper fiabil pentru alinierea între elemente în interfețe.
În interfețele mobile, baseline este utilizat ca linie de referință pentru alinierea textului cu elementele non-text. Când lângă text se află o pictogramă, un buton sau o imagine, simpla aliniere la centru nu este suficientă — textul pare optic deplasat dacă baseline-ul său nu coincide cu centrul sau baseline-ul componentei învecinate.
Un scenariu tipic — un rând cu pictogramă și text într-o listă de setări sau navigare. Dacă aliniați pictograma și textul la centru, textul va părea vizual mai sus deoarece baseline-ul este situat sub centrul geometric al containerului. Soluția — alinierea pictogramei la baseline-ul textului. Material Design (2025) recomandă această abordare pentru toate rândurile mixte cu text și pictograme în aplicațiile mobile.
| Scenariu | Aliniere la centru | Aliniere pe baseline |
|---|---|---|
| Pictogramă + text | Textul pare deasupra pictogramei | Pictograma și baseline-ul textului coincid |
| Text + text | Diferite dimensiuni creează tremor | Baseline unic, ierarhie clară |
| Buton cu text | Textul este deplasat de la centru | Textul este optic centrat |
| Titlu + subtitlu | Ruptură vizuală a rândurilor | Rânduri ritmice și coerente |
Alinierea optică pe baseline este deosebit de importantă pentru formularele ecran: câmpuri de intrare, etichete și mesaje de eroare formează o rețea tipografică complexă, iar deplasarea baseline-ului chiar și cu 1–2 pixeli degradează semnificativ percepția.
În dezvoltarea iOS, baseline este suportat prin mai multe mecanisme, de la Auto Layout până la sistemul de layout SwiftUI. În UIKit, pentru poziționarea textului în raport cu elementele învecinate se utilizează NSLayoutConstraint cu atributele .firstBaseline și .lastBaseline. Primul este potrivit pentru text pe o singură linie, al doilea — pentru text pe mai multe linii unde ultimul rând este important.
// UIKit: aliniază eticheta și pictograma pe baseline
let label = UILabel()
label.text = "Setări"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
În SwiftUI, alinierea pe baseline se realizează prin AlignmentGuide personalizat. În mod implicit, SwiftUI aliniază elementele la centru, dar pentru etichetele text cu pictograme, baseline oferă un rezultat mai precis. SwiftUI oferă VerticalAlignment.firstTextBaseline și .lastTextBaseline încorporate.
// SwiftUI: aliniere baseline în HStack
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("Setări")
.font(.title3)
}
Conform Apple HIG — Typography (2025), utilizarea firstTextBaseline în SwiftUI reduce numărul ajustărilor manuale cu 40% comparativ cu alinierea la centru. Acest lucru este deosebit de vizibil în listele cu tipuri dinamice, unde dimensiunea fontului se modifică în funcție de setările de accesibilitate ale utilizatorului.
Valoarea baseline poate fi obținută prin API-ul fontului. În UIKit, proprietatea UIFont.ascender returnează distanța de la baseline până la partea de sus a rândului, iar UIFont.descender — distanța de la baseline până la partea de jos (valoare negativă). Suma ascender și descender cu leading oferă înălțimea completă a rândului.
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // distanța de la baseline la partea de sus
let descent = font.descender // negativ, sub baseline
let totalHeight = font.lineHeight // înălțimea completă a rândului
În dezvoltarea Android, baseline este suportat atât în sistemul View clasic, cât și în Jetpack Compose. În sistemul View, pentru alinierea pe baseline se utilizează RelativeLayout.LayoutParams cu regulile ALIGN_BASELINE și ALIGN_TOP. Pentru TextView este disponibil atributul android:baselineAligned, care controlează alinierea automată a elementelor text în 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>
În Jetpack Compose, alinierea pe baseline se realizează prin Modifier.alignWithBaseline sau AlignmentLine în layout-uri personalizate. Compose oferă FirstBaseline și LastBaseline încorporate care pot fi utilizate în Column și Row pentru alinierea elementelor text de diferite dimensiuni.
// Jetpack Compose: aliniere baseline prin Modifier
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "Setări",
style = MaterialTheme.typography.titleMedium
)
}
Conform Android Developers — Typography and Alignment (2025), alinierea pe baseline în Jetpack Compose reduce cu 30% numărul bug-urilor în testele UI legate de poziționarea inexactă a textului, comparativ cu setarea manuală a padding-ului sau offset-ului.
Flutter oferă două mecanisme încorporate pentru lucrul cu linia de bază: enum TextBaseline pentru selectarea convenției tipografice (alphabetic sau ideographic) și CrossAxisAlignment.baseline pentru alinierea în Row și Column. TextBaseline.alphabetic corespunde tipografiei occidentale, iar TextBaseline.ideographic — tipografiei est-asiatice.
// Flutter: aliniere baseline
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('Setări', style: TextStyle(fontSize: 20)),
],
)
Pentru poziționarea precisă, Flutter oferă și widget-ul Baseline, care deplasează elementul copil astfel încât baseline-ul său să se afle la o distanță specificată de partea de sus a containerului. Acest lucru este util la crearea layout-urilor text personalizate cu aliniere non-standard.
// Flutter: widget-ul Baseline
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'Text aliniat',
style: TextStyle(fontSize: 24),
),
)
Conform Flutter Documentation — Layout and Typography (2025), CrossAxisAlignment.baseline — este singura modalitate de aliniere precisă a textului de diferite dimensiuni în Flutter fără calcularea manuală a padding-ului. Acest lucru este deosebit de important pentru rândurile care combină titluri și subtitluri, de exemplu, în cardurile de produs cu preț și discount.
Una dintre cele mai frecvente erori — alinierea textului la centru în rândurile cu pictograme sau imagini. Când pictograma și textul sunt aliniate la centrul containerului, textul se deplasează vizual în sus față de pictogramă. Acest lucru se întâmplă deoarece centrul textului este deasupra baseline-ului său, iar centrul pictogramei coincide cu centrul geometric.
Conform NN Group — Typography in UI Design (2025), alinierea incorectă a baseline-ului crește timpul de scanare a listei de către utilizator cu 22% comparativ cu o interfață corect aliniată. Aceasta este o metrică semnificativă pentru liste și formulare care constituie baza majorității aplicațiilor mobile.
Întrebări frecvente
Baseline — este linia orizontală pe care sunt așezate caracterele, iar line-height — distanța dintre liniile de bază a două rânduri consecutive. Baseline determină poziția textului în spațiul vertical, iar line-height — ritmul inter-linie. Ambele concepte sunt interdependente: line-height se calculează de la baseline-ul unui rând până la baseline-ul următorului.
În UIKit, valoarea baseline poate fi obținută prin proprietatea lastBaselineAnchor sau firstBaselineAnchor la UILabel, UITextView și UIButton. Pentru acces direct la metricile fontului, utilizați UIFont.ascender (distanța de la baseline la partea de sus) și UIFont.descender (distanța de la baseline la partea de jos, cu semn negativ).
Da, SwiftUI suportă baseline alignment cu tipuri dinamice (Dynamic Type). Alinierea prin .firstTextBaseline și .lastTextBaseline se adaptează automat la modificarea dimensiunii fontului. Aceasta asigură poziționarea corectă a textului la mărirea dimensiunii fără a necesita ajustarea manuală a spațierilor.
În Jetpack Compose, utilizați Alignment.FirstBaseline în parametrul verticalAlignment al Row: Row(verticalAlignment = Alignment.FirstBaseline). Pentru Icon și Text plasate în acest Row, Compose va alinia automat liniile lor de bază. Dacă trebuie să ajustați pictograma mai precis, utilizați Modifier.alignWithBaseline.
Fonturile personalizate au propriile metrici: ascender, descender și x-height care pot diferi de cele ale fonturilor de sistem. Dacă baseline alignment nu oferă un rezultat precis, verificați metricile fontului prin API-ul platformei (UIFont.descender în iOS, Paint.getFontMetrics() în Android). Pentru fonturile decorative poate fi necesară o ajustare suplimentară de 1–2 pixeli.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și