Baseline est une ligne horizontale invisible sur laquelle sont positionnés tous les caractères de la police. La plupart des lettres reposent sur la baseline, tandis que les jambages descendants s’étendent en dessous. Dans les interfaces mobiles, la baseline est utilisée pour un alignement précis du texte avec d’autres éléments — icônes, boutons, images. Selon les Material Design Typography Guidelines (2025), un alignement cohérent par la baseline améliore la hiérarchie visuelle de l’interface et réduit la charge cognitive lors du scan du contenu.
Points clés
Baseline (ligne de base) est un concept fondamental de la typographie qui définit l’axe horizontal sur lequel les caractères de la police sont positionnés. Chaque glyphe dans une police numérique a un point d’ancrage à la baseline — c’est le long de cette ligne que les lettres sont alignées lors du rendu du texte. La plupart des lettres minuscules (a, e, o, n, c) reposent directement sur la baseline, tandis que les jambages descendants (dans les lettres p, y, g, j) s’étendent en dessous.
La ligne de base n’est pas le seul point de référence dans les métriques de la police. À côté d’elle existent : x-height (hauteur des minuscules), cap-height (hauteur des majuscules), ascender-line (ligne des hampes supérieures) et descender-line (ligne des jambages inférieurs). La distance entre la baseline et descender-line détermine le jambage inférieur, et entre la baseline et ascender-line détermine la hampe supérieure. Ces métriques forment la hauteur totale de la ligne et influencent le calcul du line-height.
Selon Bringhurst — The Elements of Typographic Style (2024), la baseline est la seule métrique universelle et uniforme pour toutes les polices d’une même famille. Alors que x-height et cap-height varient d’un style à l’autre, la baseline maintient une position constante par rapport à la grille de coordonnées de la police. Cela fait de la baseline une référence fiable pour l’alignement inter-éléments dans les interfaces.
Dans les interfaces mobiles, la baseline est utilisée comme ligne de référence pour aligner le texte avec des éléments non textuels. Lorsqu’une icône, un bouton ou une image est placé à côté du texte, il ne suffit pas de les centrer — le texte semble optiquement décalé si sa baseline ne coïncide pas avec le centre ou la baseline du composant adjacent.
Un scénario typique est une ligne avec une icône et du texte dans une liste de paramètres ou de navigation. Si l’icône et le texte sont centrés, le texte apparaîtra visuellement plus haut car la baseline se trouve sous le centre géométrique du conteneur. La solution consiste à aligner l’icône sur la baseline du texte. Material Design (2025) recommande cette approche pour toutes les lignes mixtes avec texte et icônes dans les applications mobiles.
| Scénario | Alignement centré | Alignement par baseline |
|---|---|---|
| Icône + Texte | Le texte semble au-dessus de l’icône | Icône et baseline du texte coïncident |
| Texte + Texte | Différentes tailles créent un scintillement | Baseline unique, hiérarchie claire |
| Bouton avec texte | Texte décalé du centre | Texte optiquement centré |
| Titre + légende | Rupture visuelle des lignes | Lignes rythmiques et cohérentes |
L’alignement optique par la baseline est particulièrement important pour les formulaires d’écran : champs de saisie, étiquettes et messages d’erreur forment une grille typographique complexe, et un décalage de seulement 1–2 pixels de la baseline détériore notablement la perception.
Dans le développement iOS, la baseline est prise en charge par plusieurs mécanismes, depuis Auto Layout jusqu’au système de disposition de SwiftUI. Dans UIKit, pour positionner le texte par rapport aux éléments adjacents, on utilise NSLayoutConstraint avec les attributs .firstBaseline et .lastBaseline. Le premier convient pour le texte monoligne, le second pour le texte multiligne où la dernière ligne est importante.
// UIKit : aligner l’étiquette et l’icône par la baseline
let label = UILabel()
label.text = "Réglages"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
Dans SwiftUI, l’alignement par baseline est implémenté via des AlignmentGuide personnalisés. Par défaut, SwiftUI aligne les éléments au centre, mais pour les étiquettes de texte avec icônes, la baseline donne un résultat plus précis. SwiftUI fournit VerticalAlignment.firstTextBaseline et .lastTextBaseline intégrés.
// SwiftUI : alignement par baseline dans HStack
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("Réglages")
.font(.title3)
}
Selon Apple HIG — Typography (2025), utiliser firstTextBaseline dans SwiftUI réduit les ajustements manuels de padding de 40% par rapport à l’alignement centré. Cela est particulièrement notable dans les listes avec des types dynamiques, où la taille de la police change selon les réglages d’accessibilité de l’utilisateur.
La valeur de la baseline peut être obtenue via l’API de la police. Dans UIKit, la propriété UIFont.ascender retourne la distance de la baseline au sommet de la ligne, et UIFont.descender retourne la distance de la baseline au bas (valeur négative). La somme de ascender et descender, en tenant compte du leading, donne la hauteur totale de la ligne.
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // distance de la baseline au sommet
let descent = font.descender // négatif, sous la baseline
let totalHeight = font.lineHeight // hauteur totale de la ligne
Dans le développement Android, la baseline est prise en charge à la fois dans le système View classique et dans Jetpack Compose. Dans le système View, pour l’alignement par baseline, on utilise RelativeLayout.LayoutParams avec les règles ALIGN_BASELINE et ALIGN_TOP. TextView dispose de l’attribut android:baselineAligned qui contrôle l’alignement automatique des éléments de texte dans 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>
Dans Jetpack Compose, l’alignement par baseline est implémenté via Modifier.alignWithBaseline ou AlignmentLine dans les dispositions personnalisées. Compose fournit FirstBaseline et LastBaseline intégrés, qui peuvent être utilisés dans Column et Row pour aligner des éléments de texte de différentes tailles.
// Jetpack Compose : alignement par baseline via Modifier
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "Réglages",
style = MaterialTheme.typography.titleMedium
)
}
Selon Android Developers — Typography and Alignment (2025), l’alignement par baseline dans Jetpack Compose réduit de 30% les erreurs dans les tests d’interface liées au positionnement imprécis du texte, par rapport à la définition manuelle du padding ou de l’offset.
Flutter fournit deux mécanismes intégrés pour travailler avec la ligne de base : l’énumération TextBaseline pour sélectionner la convention typographique (alphabetic ou ideographic) et CrossAxisAlignment.baseline pour l’alignement dans Row et Column. TextBaseline.alphabetic correspond à la typographie occidentale, tandis que TextBaseline.ideographic correspond à la typographie d’Asie de l’Est.
// Flutter : alignement par baseline
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('Réglages', style: TextStyle(fontSize: 20)),
],
)
Pour un positionnement précis, Flutter propose également le widget Baseline, qui déplace l’élément enfant afin que sa baseline se trouve à une distance spécifiée du haut du conteneur. Cela est utile lors de la création de dispositions de texte personnalisées avec un alignement non standard.
// Flutter : widget Baseline
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'Texte aligné',
style: TextStyle(fontSize: 24),
),
)
Selon Flutter Documentation — Layout and Typography (2025), CrossAxisAlignment.baseline est le seul moyen d’aligner précisément du texte de différentes tailles dans Flutter sans calculer manuellement le padding. Cela est particulièrement important pour les lignes où les titres et les légendes sont mélangés, comme dans les fiches produit avec prix et réduction.
L’une des erreurs les plus fréquentes est de centrer le texte dans les lignes avec des icônes ou des images. Lorsqu’une icône et un texte sont centrés dans un conteneur, le texte se décale visuellement vers le haut par rapport à l’icône. Cela se produit parce que le centre du texte est au-dessus de sa baseline, tandis que le centre de l’icône coïncide avec le centre géométrique.
Selon NN Group — Typography in UI Design (2025), un mauvais alignement de la baseline augmente le temps de scan des listes par l’utilisateur de 22% par rapport à une interface correctement alignée. C’est une métrique significative pour les listes et formulaires qui constituent la base de la plupart des applications mobiles.
Foire aux questions
Baseline est la ligne horizontale sur laquelle reposent les caractères, tandis que line-height est la distance entre les lignes de base de deux lignes consécutives. La baseline détermine la position du texte dans l’espace vertical, tandis que line-height détermine le rythme interligne. Les deux concepts sont interdépendants : line-height est calculé de la baseline d’une ligne à la baseline de la suivante.
Dans UIKit, la valeur de la baseline peut être obtenue via la propriété lastBaselineAnchor ou firstBaselineAnchor de UILabel, UITextView et UIButton. Pour un accès direct aux métriques de la police, utilisez UIFont.ascender (distance de la baseline au sommet) et UIFont.descender (distance de la baseline au bas, avec un signe négatif).
Oui, SwiftUI prend en charge l’alignement par baseline avec les types dynamiques (Dynamic Type). L’alignement via .firstTextBaseline et .lastTextBaseline s’adapte automatiquement aux changements de taille de police. Cela assure un positionnement correct du texte lors de l’augmentation de la taille, sans nécessiter d’ajustements manuels de padding.
Dans Jetpack Compose, utilisez Alignment.FirstBaseline dans le paramètre verticalAlignment de Row : Row(verticalAlignment = Alignment.FirstBaseline). Pour Icon et Text placés dans ce Row, Compose alignera automatiquement leurs lignes de base. Si vous devez ajuster l’icône plus précisément, utilisez Modifier.alignWithBaseline.
Les polices personnalisées ont leurs propres métriques : ascender, descender et x-height, qui peuvent différer des polices système. Si l’alignement par baseline donne un résultat imprécis, vérifiez les métriques de la police via l’API de la plateforme (UIFont.descender sur iOS, Paint.getFontMetrics() sur Android). Les polices décoratives peuvent nécessiter un ajustement supplémentaire de 1–2 pixels.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi