Baseline è una linea orizzontale invisibile su cui sono posizionati tutti i caratteri del carattere. La maggior parte delle lettere poggia sulla baseline, mentre i discendenti si estendono al di sotto. Nelle interfacce mobili, la baseline viene utilizzata per l'allineamento preciso del testo con altri elementi — icone, pulsanti, immagini. Secondo le Material Design Typography Guidelines (2025), un allineamento coerente tramite baseline migliora la gerarchia visiva dell'interfaccia e riduce il carico cognitivo durante la scansione del contenuto.
Punti chiave
Baseline (linea di base) è un concetto fondamentale della tipografia che definisce l'asse orizzontale su cui sono posizionati i caratteri del carattere. Ogni glifo in un carattere digitale ha un punto di ancoraggio alla baseline — è lungo questa linea che le lettere vengono allineate durante il rendering del testo. La maggior parte delle lettere minuscole (a, e, o, n, c) poggia direttamente sulla baseline, mentre gli elementi discendenti (nelle lettere p, y, g, j) si estendono al di sotto.
La linea di base non è l'unico punto di riferimento nelle metriche del carattere. Accanto ad essa esistono: x-height (altezza delle minuscole), cap-height (altezza delle maiuscole), ascender-line (linea degli ascendenti superiori) e descender-line (linea dei discendenti inferiori). La distanza tra baseline e descender-line determina il discendente inferiore, e tra baseline e ascender-line determina l'ascendente superiore. Queste metriche formano l'altezza completa della riga e influenzano il calcolo del line-height.
Secondo Bringhurst — The Elements of Typographic Style (2024), la baseline è l'unica metrica universale e uniforme per tutti i caratteri dello stesso tipo di carattere. Mentre x-height e cap-height variano da uno stile all'altro, la baseline mantiene una posizione costante rispetto alla griglia di coordinate del carattere. Ciò rende la baseline un riferimento affidabile per l'allineamento tra elementi nelle interfacce.
Nelle interfacce mobili, la baseline viene utilizzata come linea di riferimento per allineare il testo con elementi non testuali. Quando un'icona, un pulsante o un'immagine viene posizionato accanto al testo, non basta centrarli — il testo appare otticamente spostato se la sua baseline non coincide con il centro o la baseline del componente adiacente.
Uno scenario tipico è una riga con un'icona e del testo in un elenco di impostazioni o navigazione. Se l'icona e il testo vengono centrati, il testo apparirà visivamente più alto perché la baseline si trova sotto il centro geometrico del contenitore. La soluzione è allineare l'icona alla baseline del testo. Material Design (2025) raccomanda questo approccio per tutte le righe miste con testo e icone nelle applicazioni mobili.
| Scenario | Allineamento centrato | Allineamento per baseline |
|---|---|---|
| Icona + Testo | Il testo appare sopra l'icona | Icona e baseline del testo coincidono |
| Testo + Testo | Dimensioni diverse creano vibrazione | Baseline unica, gerarchia chiara |
| Pulsante con testo | Testo spostato dal centro | Testo otticamente centrato |
| Titolo + didascalia | Rottura visiva delle righe | Righe ritmiche e coerenti |
L'allineamento ottico tramite baseline è particolarmente importante per i moduli a schermo: campi di input, etichette e messaggi di errore formano una complessa griglia tipografica, e anche uno spostamento di 1–2 pixel della baseline compromette notevolmente la percezione.
Nello sviluppo iOS, la baseline è supportata attraverso diversi meccanismi, da Auto Layout al sistema di layout di SwiftUI. In UIKit, per posizionare il testo rispetto agli elementi adiacenti, si usa NSLayoutConstraint con gli attributi .firstBaseline e .lastBaseline. Il primo è adatto per testo a riga singola, il secondo per testo multilinea dove l'ultima riga è importante.
// UIKit: allineare etichetta e icona per baseline
let label = UILabel()
label.text = "Impostazioni"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
In SwiftUI, l'allineamento per baseline viene implementato tramite AlignmentGuide personalizzati. Per impostazione predefinita, SwiftUI allinea gli elementi al centro, ma per le etichette di testo con icone, la baseline dà un risultato più preciso. SwiftUI fornisce VerticalAlignment.firstTextBaseline e .lastTextBaseline integrati.
// SwiftUI: allineamento per baseline in HStack
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("Impostazioni")
.font(.title3)
}
Secondo Apple HIG — Typography (2025), usare firstTextBaseline in SwiftUI riduce le regolazioni manuali del padding del 40% rispetto all'allineamento centrato. Ciò è particolarmente evidente negli elenchi con tipi dinamici, dove la dimensione del carattere cambia in base alle impostazioni di accessibilità dell'utente.
Il valore della baseline può essere ottenuto tramite l'API del carattere. In UIKit, la proprietà UIFont.ascender restituisce la distanza dalla baseline alla parte superiore della riga, e UIFont.descender restituisce la distanza dalla baseline alla parte inferiore (valore negativo). La somma di ascender e descender, tenendo conto del leading, dà l'altezza completa della riga.
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // distanza dalla baseline alla parte superiore
let descent = font.descender // negativo, sotto la baseline
let totalHeight = font.lineHeight // altezza completa della riga
Nello sviluppo Android, la baseline è supportata sia nel sistema View classico che in Jetpack Compose. Nel sistema View, per l'allineamento per baseline si usa RelativeLayout.LayoutParams con le regole ALIGN_BASELINE e ALIGN_TOP. TextView dispone dell'attributo android:baselineAligned che controlla l'allineamento automatico degli elementi di testo in 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>
In Jetpack Compose, l'allineamento per baseline viene implementato tramite Modifier.alignWithBaseline o AlignmentLine in layout personalizzati. Compose fornisce FirstBaseline e LastBaseline integrati, che possono essere usati in Column e Row per allineare elementi di testo di diverse dimensioni.
// Jetpack Compose: allineamento per baseline tramite Modifier
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "Impostazioni",
style = MaterialTheme.typography.titleMedium
)
}
Secondo Android Developers — Typography and Alignment (2025), l'allineamento per baseline in Jetpack Compose riduce del 30% gli errori nei test UI relativi al posizionamento impreciso del testo, rispetto all'impostazione manuale di padding o offset.
Flutter fornisce due meccanismi integrati per lavorare con la linea di base: l'enumerazione TextBaseline per selezionare la convenzione tipografica (alphabetic o ideographic) e CrossAxisAlignment.baseline per l'allineamento in Row e Column. TextBaseline.alphabetic corrisponde alla tipografia occidentale, mentre TextBaseline.ideographic corrisponde alla tipografia dell'Asia orientale.
// Flutter: allineamento per baseline
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('Impostazioni', style: TextStyle(fontSize: 20)),
],
)
Per un posizionamento preciso, Flutter offre anche il widget Baseline, che sposta l'elemento figlio in modo che la sua baseline si trovi a una distanza specificata dalla parte superiore del contenitore. Ciò è utile quando si creano layout di testo personalizzati con allineamenti non standard.
// Flutter: widget Baseline
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'Testo allineato',
style: TextStyle(fontSize: 24),
),
)
Secondo Flutter Documentation — Layout and Typography (2025), CrossAxisAlignment.baseline è l'unico modo per allineare con precisione testo di diverse dimensioni in Flutter senza calcolare manualmente il padding. Ciò è particolarmente importante per le righe in cui titoli e didascalie sono mescolati, come nelle schede prodotto con prezzo e sconto.
Uno degli errori più comuni è centrare il testo in righe con icone o immagini. Quando un'icona e un testo vengono centrati all'interno di un contenitore, il testo si sposta visivamente verso l'alto rispetto all'icona. Ciò accade perché il centro del testo è sopra la sua baseline, mentre il centro dell'icona coincide con il centro geometrico.
Secondo NN Group — Typography in UI Design (2025), un allineamento errato della baseline aumenta il tempo di scansione degli elenchi da parte dell'utente del 22% rispetto a un'interfaccia correttamente allineata. Questa è una metrica significativa per elenchi e moduli che costituiscono la base della maggior parte delle applicazioni mobili.
Domande frequenti
Baseline è la linea orizzontale su cui poggiano i caratteri, mentre line-height è la distanza tra le linee di base di due righe consecutive. La baseline determina la posizione del testo nello spazio verticale, mentre line-height determina il ritmo interlinea. Entrambi i concetti sono interconnessi: line-height viene calcolato dalla baseline di una riga alla baseline della successiva.
In UIKit, il valore della baseline può essere ottenuto tramite la proprietà lastBaselineAnchor o firstBaselineAnchor di UILabel, UITextView e UIButton. Per l'accesso diretto alle metriche del carattere, usa UIFont.ascender (distanza dalla baseline alla parte superiore) e UIFont.descender (distanza dalla baseline alla parte inferiore, con segno negativo).
Sì, SwiftUI supporta l'allineamento per baseline con i tipi dinamici (Dynamic Type). L'allineamento tramite .firstTextBaseline e .lastTextBaseline si adatta automaticamente al cambiamento della dimensione del carattere. Ciò garantisce un posizionamento corretto del testo all'aumentare della dimensione, senza richiedere regolazioni manuali del padding.
In Jetpack Compose, usa Alignment.FirstBaseline nel parametro verticalAlignment di Row: Row(verticalAlignment = Alignment.FirstBaseline). Per Icon e Text posizionati in questa Row, Compose allineerà automaticamente le loro linee di base. Se hai bisogno di regolare l'icona più precisamente, usa Modifier.alignWithBaseline.
I caratteri personalizzati hanno proprie metriche: ascender, descender e x-height, che possono differire dai caratteri di sistema. Se l'allineamento per baseline dà un risultato impreciso, controlla le metriche del carattere tramite l'API della piattaforma (UIFont.descender su iOS, Paint.getFontMetrics() su Android). I caratteri decorativi potrebbero richiedere una regolazione aggiuntiva di 1–2 pixel.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche