CSS text-box-trim

Publié le 14 janvier 2025

À partir de Chrome 133, text-box permet aux développeurs et aux concepteurs de personnaliser l'espace au-dessus et en dessous du texte.

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: behind a flag.
  • Safari: 18.2.

Source

Version longue :

text-box-trim: trim-start | trim-end | trim-both | none;
text-box-edge: cap | ex | text | leading + alphabetic | text;

Version courte :

text-box: trim-both cap alphabetic;

Cette propriété vous permet de contrôler l'espace au-dessus et en dessous du texte, par exemple <h1>, <button> et <p>. Chaque police produit une quantité différente de cet espace directionnel de bloc, ce qui contribue à la taille de l'élément. Cette contribution d'espace chaotique n'est pas facile à mesurer et était impossible à contrôler jusqu'à présent.

La police le sait, et maintenant le CSS aussi.

Essayer sur CodePen

L'espace au-dessus et en dessous d'une police existe en raison de la façon dont le Web dispose le texte, appelé "demi-interligne". Ce sujet est abordé de manière experte dans un article de Matthias Ott intitulé The Thing With Leading In CSS. Essentiellement, lorsque la composition était effectuée à la main, des morceaux de plomb étaient utilisés pour séparer les lignes de texte. Le Web, inspiré par l'interligne, divise le plomb en deux et distribue un morceau au-dessus et un morceau en dessous du contenu.

Un titre est affiché avec une barre rose vif au-dessus et en dessous du texte pour illustrer le demi-interligne. Source

Cette histoire est importante, car text-box nous donne des noms pour chaque moitié : over et under. De plus, il est possible de les supprimer.

Il existe également un état antérieur à text-box. Vous vous souvenez peut-être de l'article passionnant d' Ethan Wang intitulé Leading-Trim: The Future Of Digital Typesetting, dans lequel leading-trim (le nom que text-box avait auparavant) a été introduit pour la première fois.

Un titre avec un espace excessif au-dessus et en dessous semble avoir été coupé aux ciseaux et supprimé.

Votre point d'entrée dans la suppression de texte peut provenir de Figma et de ses commandes "vertical trim" pour les concepteurs. Ce post X montre où se trouve cette option de suppression verticale et comment elle est utile pour les boutons.

Source

Quelle que soit la façon dont vous êtes arrivé ici, cette petite commande de typographie peut faire une grande différence.

Fonctionnalité et syntaxe

Voici, selon moi, les deux commandes les plus courantes dont vous aurez besoin lorsque vous travaillerez avec text-box :

h1 {
  /* trim both sides to the capital letters */
  text-box: trim-both cap alphabetic;

  /* trim both sides to the lowercase letter x */
  text-box: trim-both ex alphabetic;
}

La suppression des deux éléments sur cap alphabetic sera l'utilisation la plus courante de cette fonctionnalité. Les démonstrations suivantes l'utilisent plusieurs fois. Toutefois, l'exemple précédent montre également ex alphabetic, car il est utile pour l'équilibre optique à sa manière.

Bac à sable de l'explorateur

Explorez la syntaxe dans notre bac à sable, et consultez les résultats à l'aide de menus déroulants. Vous pouvez modifier les polices, les valeurs de suppression au-dessus et en dessous, et suivre les visuels et les libellés codés par couleur.

L'aperçu de la syntaxe avec text-box : la syntaxe trim-both cap alphabetic est mise en surbrillance et affichée. Trois autres menus déroulants permettent de choisir les valeurs de suppression.

À essayer :

  1. Inspecter visuellement le fonctionnement de text-box-trim sur les variantes de texte sur une seule ligne et sur plusieurs lignes.
  2. Placer le curseur sur une variante pour voir les valeurs de suppression utilisées pour obtenir cet effet.
  3. Modifier la police.
  4. Supprimer un seul côté d'une zone de texte.
  5. Vérifier la syntaxe pendant que vous jouez.
Essayer sur CodePen

Que puis-je créer et quels problèmes cela résout-il ?

Cette fonctionnalité de suppression permet de trouver des solutions de centrage et d'alignement beaucoup plus simples. Vous pouvez même vous rapprocher d'un interligne approprié, où un élément tel que gap peut être utilisé entre les contenus.

Comparaison entre deux groupes de contenus.
Le premier groupe comporte un demi-interligne, le second un interligne supprimé. Le résultat est que le deuxième groupe est plus compact. Essayer sur CodePen

Centrage plus facile

Pour les composants plus petits, plus intégrés et intrinsèques au contenu, padding: 10px est un style raisonnable à spécifier pour un élément afin d'obtenir un espacement égal sur tous les côtés. Toutefois, le résultat peut dérouter les utilisateurs, car il comporte souvent un espace supplémentaire en haut et en bas.

Pour contourner ce problème, les développeurs ajoutent souvent explicitement moins de marge intérieure en haut et en bas (bloc) pour compenser les effets du demi-interligne.

button {
  padding-block: 5px;
  padding-inline: 10px;
}

À ce stade, il ne nous reste plus qu'à essayer des combinaisons de valeurs jusqu'à ce que les éléments soient centrés optiquement. Cela peut être correct sur un écran et un système d'exploitation, mais pas sur un autre.

text-box nous permet de supprimer l'espace de demi-interligne du texte, ce qui rend utiles les valeurs de marge intérieure égales telles que 10px :

button {
  text-box: trim-both cap alphabetic;
  padding: 10px;
}
Deux exemples sont présentés.
Le premier montre un élément avec une marge intérieure de 10 px et un demi-interligne. Le deuxième montre le même élément avec text-box: trim-both cap alphabetic. Le résultat est que le deuxième bouton est centré optiquement. Essayer sur CodePen

Voici quelques éléments <button> qui montrent comment la suppression de l'espace avec text-box permet à padding: 10px d'apparaître égal sur tous les côtés dans un élément interactif pratique. Notez que la police alternative peut produire un espace de demi-interligne très différent.

Trois groupes de boutons. La première utilise une police sans serif standard, la deuxième une police fantaisie ou amusante, et la troisième le même effet avec une police manuscrite.
Chaque police a un espace de demi-interligne différent, mais les valeurs de suppression sont les mêmes et peuvent normaliser l'espace. Essayer sur CodePen

Voici des éléments <span>, souvent utilisés pour afficher des catégories ou des badges. Un autre cas où une marge intérieure égale sur tous les côtés devrait être la meilleure solution, mais jusqu'à text-box, nous avons dû la contourner.

Les balises sont affichées côte à côte. Le premier groupe a une demi-interligne, le second a une interligne réduite.
Le deuxième groupe de balises est plus compact et centré optiquement, grâce à l'interligne supprimé.

Alignement plus facile

L'espace de demi-interligne supplémentaire, incontrôlable, au-dessus (over) et en dessous (under) d'une zone de texte rend également l'alignement difficile. Les exemples suivants montrent quand le demi-interligne peut rendre l'alignement difficile et comment la suppression des côtés de bloc d'une zone de texte peut créer de meilleurs alignements.

Une image est placée à côté du texte. L'image s'agrandit jusqu'à la hauteur dont le texte a besoin. Sans text-box, l'image est toujours un peu plus haute. Avec text-box, l'image peut s'aligner parfaitement sur le contenu textuel.

Essayer sur CodePen

Notez que l'espace blanc se trouve au-dessus de la première ligne de texte mise en forme et en dessous de la dernière ligne de texte mise en forme dans les scénarios avec retour à la ligne.

Dans l'exemple suivant, notez comment la fonctionnalité s'adapte logiquement à une modification du writing-mode. Essayez de modifier le texte et voyez comment la mise en page reste alignée.

Essayer sur CodePen

Poursuivre l'étude

Vous voulez en savoir plus ? La liste de liens suivante propose différentes quantités d'informations supplémentaires et de cas d'utilisation.