Mis à jour 10 juillet 2026

Nommer les tokens typographiques (display, heading, body, caption)

Nommez les tokens typographiques d’après le rôle que joue le texte — display, heading-lg, body-md, caption — jamais d’après leurs valeurs (font-24) ni d’après les éléments HTML qu’ils stylisent (h2-size). Les noms fondés sur des valeurs deviennent obsolètes dès que l’échelle est réajustée, et les noms fondés sur des éléments couplent le style visuel au balisage du document, deux décisions distinctes. Un nom de rôle énonce la seule chose du token censée rester vraie : le travail que fait ce texte.

La seconde moitié de la règle compte tout autant : un token typographique est composite. La taille, l’interligne, la graisse et l’espacement entre lettres voyagent ensemble sous le nom de rôle — un body-md qui ne porte qu’une taille n’est pas un style, c’est un nombre. Cet article couvre les deux moitiés, la convention de tailles de t-shirt qui garde les ensembles de rôles restreints, et le chemin d’export qui porte les noms vers CSS, Tailwind et Figma. Il fait partie de notre guide de l’échelle typographique.

Pourquoi ne pas nommer les tokens d’après leurs valeurs ?

Parce que les valeurs sont la partie du système conçue pour changer. Supposons que votre échelle génère une taille de titre de 24 px et que vous nommiez le token font-24. Le trimestre suivant, le ratio passe de 1,25 à 1,333 et cette marche calcule désormais 25 px. Vos deux options sont mauvaises : renommer le token partout où il est utilisé — un changement cassant dans chaque feuille de style, chaque composant et chaque fichier de design qui le référence — ou conserver un token nommé font-24 dont la valeur est 25, ce qui est pire, car le nom ment désormais activement.

Un nom de rôle survit au réajustement sans y toucher. heading-md peut passer de 24 px à 25 px et chaque usage reste correct, car le nom n’a jamais revendiqué une valeur — il a revendiqué un travail, et le travail n’a pas changé. C’est le même raisonnement qui éloigne les systèmes de couleur des noms comme blue-500 pour des emplacements sémantiques : nommez la décision, pas la réponse du moment.

Pourquoi ne pas nommer les tokens d’après les éléments ?

h2-size semble inoffensif — jusqu’à ce que le style et le balisage doivent diverger, ce qui, dans les produits réels, arrive constamment. Les niveaux de titre en HTML expriment la structure du document : un h2 est « une section un niveau sous un h1 », un fait sur lequel s’appuient les lecteurs d’écran et les plans de document. Le rang visuel est une décision distincte. Le titre d’une carte peut être un h3 sur le tableau de bord et un h2 sur sa propre page tout en paraissant identique dans les deux cas ; une page juridique peut porter six niveaux de structure mais seulement trois niveaux de différenciation visuelle.

Les tokens nommés d’après les éléments imposent un choix entre deux modes d’échec : choisir l’élément pour son apparence (mauvais plan de document, un coût d’accessibilité) ou le choisir pour la structure et obtenir le mauvais style. Les tokens nommés d’après les rôles dissolvent le conflit — n’importe quel élément peut porter heading-md, et le plan du document reste une décision sémantique indépendante.

Que contient réellement un token typographique ?

Un style de texte complet. Les propriétés d’un style de texte se règlent comme un tout : un titre de 28 px reçoit son interligne de 36 px *parce qu’*il fait 28 px, sa graisse de 600 parce que les titres se hiérarchisent par leur noirceur, son espacement entre lettres de −0,01em parce que l’espacement intégré des polices paraît lâche à mesure que les tailles augmentent. Appliquez la taille sans le reste et vous n’avez pas appliqué le style — vous avez appliqué un fragment et laissé les trois autres propriétés à ce que le contexte hérite par hasard.

C’est pourquoi le format de tokens DTCG définit typography comme un type composite : un seul token dont la valeur est le paquet entier — famille, taille, graisse, interligne, espacement entre lettres — plutôt que cinq tokens épars qui espèrent être utilisés ensemble.

Comment fonctionne la convention taille-de-t-shirt-dans-le-rôle ?

La plupart des systèmes s’accordent sur un nom en deux parties : d’abord la famille de rôle, ensuite une taille de t-shirt au sein du rôlebody-sm, body-md, body-lg. Les familles sont peu nombreuses et stables : display au sommet, une série de tailles heading, une série de tailles body, et les petits rôles utilitaires — caption et overline — en bas. Le suffixe de t-shirt absorbe la croissance : quand un design a réellement besoin d’un style de corps plus grand, body-lg apparaît sans rien renommer de ce qui existe.

Deux conventions gardent les ensembles honnêtes. Les rôles qui n’apparaissent qu’une fois ne reçoivent pas de suffixe — caption plutôt que caption-md — jusqu’à ce qu’une deuxième variante existe réellement. Et display se place au-dessus de la série des titres comme sa propre famille plutôt que comme heading-xl, car son travail (une accroche héroïque lue d’un seul coup d’œil) diffère de celui d’un titre (l’orientation), et ses propriétés — interligne plus serré, espacement entre lettres plus serré — brisent le motif des titres au lieu de le prolonger.

À quoi ressemble un ensemble de rôles complet ?

Voici un ensemble concret, généré à partir d’une base de 16 px au ratio 1,333 avec deux marches par intervalle, les interlignes alignés sur la grille de ligne de base de 8 px (la moitié de la base) et la famille de police omise par souci de concision :

{
  "type": {
    "display":    { "$type": "typography", "$value":
      { "fontSize": "51px", "lineHeight": "56px", "fontWeight": 700, "letterSpacing": "-0.02em" } },
    "heading-lg": { "$type": "typography", "$value":
      { "fontSize": "38px", "lineHeight": "48px", "fontWeight": 700, "letterSpacing": "-0.015em" } },
    "heading-md": { "$type": "typography", "$value":
      { "fontSize": "28px", "lineHeight": "36px", "fontWeight": 600, "letterSpacing": "-0.01em" } },
    "heading-sm": { "$type": "typography", "$value":
      { "fontSize": "21px", "lineHeight": "28px", "fontWeight": 600, "letterSpacing": "0em" } },
    "body-lg":    { "$type": "typography", "$value":
      { "fontSize": "18px", "lineHeight": "28px", "fontWeight": 400, "letterSpacing": "0em" } },
    "body-md":    { "$type": "typography", "$value":
      { "fontSize": "16px", "lineHeight": "24px", "fontWeight": 400, "letterSpacing": "0em" } },
    "body-sm":    { "$type": "typography", "$value":
      { "fontSize": "14px", "lineHeight": "20px", "fontWeight": 400, "letterSpacing": "0em" } },
    "caption":    { "$type": "typography", "$value":
      { "fontSize": "12px", "lineHeight": "16px", "fontWeight": 400, "letterSpacing": "0.02em" } },
    "overline":   { "$type": "typography", "$value":
      { "fontSize": "12px", "lineHeight": "16px", "fontWeight": 500, "letterSpacing": "0.08em" } }
  }
}

Chaque taille se situe sur l’échelle, chaque interligne est un multiple de la ligne de base de 8 px, et chaque token se lit comme un style complet — le relecteur voit d’un coup d’œil que les petites tailles gagnent en graisse et en espacement tandis que les grandes tailles perdent les deux.

C’est la forme que Scale Composer assemble à mesure que vous assignez des marches d’échelle aux rôles : ouvrez l’export de tokens de cette échelle — les niveaux sémantiques de caption à display, chacun rassemblé avec sa taille, son interligne, sa graisse et son espacement entre lettres sous son nom de rôle.

Export de tokens de Scale Composer montrant un ensemble complet de rôles typographiques de caption à display sous forme de tokens composites nommés

Comment les tokens de rôle voyagent-ils vers le code et les outils de design ?

Les noms de rôle sont le contrat ; les formats sont des moyens de transport. À partir d’une seule source DTCG, le même ensemble s’exporte en propriétés personnalisées CSS, en bloc @theme Tailwind v4, et en Variables Figma — de sorte que le body-md qu’un designer applique dans Figma et le body-md qu’un développeur référence dans une feuille de style sont le même token, pas deux conventions qui riment par hasard. Ce vocabulaire partagé est le véritable bénéfice du nommage par rôle : « mets-le en heading-sm » est une instruction que les deux camps peuvent exécuter sans table de traduction, et un réajustement d’échelle se propage à chaque surface en régénérant les exports plutôt qu’en renommant quoi que ce soit.

Nommez votre propre ensemble

Le nommage est plus facile tant que les valeurs sont encore vivantes : ouvrez le même ensemble de rôles en sortie @theme Tailwind v4, renommez un niveau, et vérifiez l’instinct qui compte — ce nom serait-il encore vrai si chaque valeur en pixels du fichier changeait demain ? Si oui, c’est un rôle. Si non, c’est une valeur qui porte une étiquette avec un nom dessus.

Continuer la lecture