text-box en CSS: recorta el espacio sobrante del texto

Hoy me he cruzado con esta línea de CSS:

text-box: trim-both cap alphabetic;

No la conocía ni de lejos. Y resulta que resuelve un problema que llevo años arreglando a ojo.

El problema: el espacio fantasma del texto

Haz un botón con el mismo padding arriba y abajo:

.button {
  padding: 12px 24px;
}

En teoría el texto queda centrado. En la práctica, muchas veces parece que hay más aire arriba que abajo, o al revés.

El motivo es que la caja de una línea de texto no termina donde terminan las letras. Incluye:

El padding se suma a todo ese espacio invisible, así que el centrado visual depende de cómo esté diseñada cada fuente. Por eso acabamos haciendo cosas como padding-top: 13px; padding-bottom: 11px; hasta que “parece que está bien”.

La solución: text-box

text-box es un atajo de dos propiedades:

Así que esta línea:

text-box: trim-both cap alphabetic;

Significa: recorta arriba y abajo, deja el borde superior a la altura de las mayúsculas (cap) y el inferior en la línea base (alphabetic), donde se apoyan las letras.

El resultado es una caja que se ajusta a las letras. Ahora el padding sí es el espacio que ves:

.button {
  padding: 12px 24px;
  text-box: trim-both cap alphabetic;
}

Míralo en acción. Las dos cajas tienen el mismo padding y la línea discontinua marca la caja del texto:

Demo/ text-box-trim
Resultado
HOLA
Sin text-box
HOLA
Con text-box: trim-both cap alphabetic

Tu navegador no soporta text-box, así que verás las dos cajas iguales.

Sin text-box, la caja del texto deja aire por encima y por debajo de las letras. Con text-box, se pega a las mayúsculas y el padding queda igual por los cuatro lados.

Otros valores útiles

Para el borde superior, además de cap, puedes usar ex, que recorta a la altura de las minúsculas (la altura de la x). Viene bien si el texto va todo en minúsculas:

.tag {
  text-box: trim-both ex alphabetic;
}

Y si solo te molesta el espacio de arriba, por ejemplo en un título pegado al borde superior de una tarjeta, recorta un solo lado:

.card h2 {
  text-box: trim-start cap alphabetic;
}

Ojo con los descendentes

Al recortar hasta la línea base, las letras como g, p o y sobresalen por debajo de la caja. No se cortan, se siguen viendo, pero invaden el padding. En botones y etiquetas cortas no suele notarse. En párrafos largos no tiene mucho sentido usarlo.

¿Puedo usarlo ya?

Funciona en Chrome y Edge desde la versión 133 y en Safari desde la 18.2. En Firefox, consulta Can I Use para ver su estado actual.

Lo bueno es que funciona como mejora progresiva: si el navegador no lo entiende, ignora la línea y el texto se ve como siempre. No se rompe nada.

Conclusión

Una línea de CSS que me habría ahorrado muchos píxeles a ojo. Tienes más detalles en MDN y en el artículo de Chrome sobre text-box-trim.


Comparte


Artículos relacionados

La gran mentira de letter-spacing en CSS que no sabías

Te han mentido sobre letter-spacing en CSS. No funciona como crees. ¿Llevas años usando mal el espaciado de letras? Spoiler: sí. Este error silencioso está arruinando tu tipografía, y ni siquiera te diste cuenta.

Leer artículo→

La sintaxis secreta de `of S` en `:nth-child()` que probablemente estás ignorando

Descubre cómo usar `:nth-child(of S)` para seleccionar elementos con una precisión quirúrgica digna de CSS moderno y evita errores comunes que ni sabías que estabas cometiendo.

Leer artículo→