Ajuste de tamaño de CSS para @font-face

A medida que se carga una fuente web, ahora puedes ajustar su escala para normalizar los tamaños de fuente del documento y evitar el cambio de diseño cuando cambias de fuente.

Considera la siguiente demostración en la que font-size es un 64px coherente y la única diferencia entre cada uno de estos encabezados es font-family. Los ejemplos de la izquierda no se ajustaron y tienen un tamaño final incoherente. Los ejemplos de la derecha usan size-adjust para garantizar que 64px sea el tamaño final coherente.

En este ejemplo, se usan las herramientas de depuración de diseño de cuadrícula de CSS de las Herramientas para desarrolladores de Chrome para mostrar las alturas.

En esta entrada, se explora un nuevo descriptor de @font-face de CSS llamado size-adjust. También se muestran algunas formas de corregir y normalizar los tamaños de fuente para lograr una experiencia del usuario más fluida, sistemas de diseño coherentes y un diseño de página más predecible. Un caso de uso importante es la optimización de la renderización de fuentes web para evitar el cambio de diseño acumulado (CLS).

Browser Support

  • Chrome: 92.
  • Edge: 92.
  • Firefox: 92.
  • Safari: 17.

Source

Aquí tienes una demostración interactiva del espacio del problema. Intenta cambiar el tipo de letra con el menú desplegable y observa lo siguiente:

  1. Las diferencias de altura en los resultados.
  2. Cambios de contenido visualmente bruscos
  3. Áreas de destino interactivas en movimiento (el menú desplegable salta).

Cómo ajustar el tamaño de las fuentes con size-adjust

Introducción a la sintaxis:

@font-face {
  font-family: "Adjusted Typeface";
  size-adjust: 150%;
  src: url(some/path/to/typeface.woff2) format('woff2');
}
  1. Crea un tipo de letra personalizado llamado Adjusted Typeface.
  2. Usa size-adjust para aumentar cada glifo al 150% de su tamaño predeterminado.
  3. Solo afecta al único tipo de letra importado.

Usa el tipo de letra personalizado anterior de la siguiente manera:

h1 {
  font-family: "Adjusted Typeface";
}

Cómo mitigar el CLS con el intercambio de fuentes sin interrupciones

En el siguiente GIF, observa los ejemplos de la izquierda y cómo se produce un cambio cuando se modifica la fuente. Este es solo un pequeño ejemplo con un solo elemento de título, y el problema es muy evidente.

El ejemplo de la izquierda tiene cambio de diseño, mientras que el de la derecha no.

Para mejorar la renderización de fuentes, una excelente técnica es el intercambio de fuentes. Renderiza una fuente del sistema de carga rápida para mostrar el contenido primero y, luego, cámbiala por una fuente web cuando esta termine de cargarse. Esto te brinda lo mejor de ambos mundos: el contenido es visible lo antes posible y obtienes una página con un diseño agradable sin sacrificar el tiempo de tu usuario para el contenido. Sin embargo, el problema es que, a veces, cuando se carga la fuente web, se desplaza toda la página, ya que se presenta con un tamaño de altura de caja ligeramente diferente.

más contenido equivale a más cambios de diseño potenciales cuando se intercambian las fuentes

Si colocas size-adjust en la regla @font-face, se establece un ajuste global de glifos para el rostro de la fuente. Si lo haces en el momento adecuado, el cambio visual será mínimo y el intercambio será fluido. Para crear un intercambio perfecto, ajusta manualmente o prueba esta calculadora de ajuste de tamaño de Malte Ubl.

Elige una fuente web de Google y obtén un fragmento de @font-face preajustado.

Al principio de esta publicación, la solución del problema del tamaño de la fuente se realizó por prueba y error. Se ajustó size-adjust en el código fuente hasta que el mismo encabezado en Cookie y Arial renderizó el mismo 64px que Press Start 2P de forma natural. Alineé dos fuentes con un tamaño de fuente objetivo.

@font-face {
  font-family: 'Adjusted Arial';
  size-adjust: 86%;
  src: local(Arial);
}

@font-face {
  font-family: 'Cookie';
  size-adjust: 90.25%;
  src: url(...woff2) format('woff2');
}

Calibración de fuentes

Tú, como autor, determinas los objetivos de calibración para normalizar la escala de la fuente. Puedes normalizar en Times, Arial o una fuente del sistema, y luego ajustar las fuentes personalizadas para que coincidan. También puedes ajustar las fuentes locales para que coincidan con las que descargas.

Estrategias para la calibración de size-adjust:

  1. Destino remoto:
    Ajusta las fuentes locales a las fuentes descargadas.
  2. Objetivo local:
    Ajusta las fuentes descargadas para que se parezcan a las fuentes objetivo locales.

Ejemplo 1: Destino remoto

Considera el siguiente fragmento, que ajusta una fuente disponible de forma local para que coincida en tamaño con una fuente personalizada de src remota. Una fuente personalizada remota es el objetivo de la calibración, tal vez una fuente de la marca:

@font-face {
  font-family: "Adjusted Regular Arial For Brand";
  src: local(Arial);
  size-adjust: 90%;
}

@font-face {
  font-family: "Rad Brand";
  src: url(some/path/to/a.woff2) format('woff2');
}

html {
  font-family: "Rad Brand", "Adjusted Regular Arial For Brand";
}

En este ejemplo, la fuente local Arial se ajusta en previsión de una fuente personalizada cargada, para un intercambio sin problemas.

Esta estrategia tiene la ventaja de ofrecer a los diseñadores y desarrolladores la misma fuente para el tamaño y la tipografía. La marca es el objetivo de calibración. Esta es una excelente noticia para los sistemas de diseño.

Tener un tipo de letra de la marca como objetivo también es la forma en que funciona la calculadora de Malte. Elige una fuente de Google y se calculará cómo ajustar Arial para que se intercambie sin problemas. Este es un ejemplo de CSS de Roboto de la calculadora, en el que se carga Arial y se le asigna el nombre "Roboto-fallback":

@font-face {
    font-family: "Roboto-fallback";
    size-adjust: 100.06%;
    src: local("Arial");
}

Para crear un ajuste completamente multiplataforma, consulta el siguiente ejemplo, que proporciona 2 fuentes de resguardo locales ajustadas en previsión de una fuente de marca.

@font-face {
    font-family: "Roboto-fallback-1";
    size-adjust: 100.06%;
    src: local("Arial");
}

@font-face {
    font-family: "Roboto-fallback-2";
    size-adjust: 99.94%;
    src: local("Arimo");
}

@font-face {
  font-family: "Roboto Regular";
  src: url(some/path/to/roboto.woff2) format('woff2');
}

html {
  font-family: "Roboto Regular", "Roboto-fallback-1", "Roboto-fallback-2";
}

Ejemplo 2: Segmentación local

Considera el siguiente fragmento, que ajusta una fuente personalizada de la marca para que coincida con Arial:

@font-face {
  font-family: "Rad Brand - Adjusted For Arial";
  src: url(some/path/to/a.woff2) format('woff2');
  size-adjust: 110%;
}

html {
  font-family: "Rad Brand - Adjusted For Arial", Arial;
}

Esta estrategia tiene la ventaja de renderizar sin ningún ajuste y, luego, ajustar las fuentes entrantes para que coincidan.

Ajuste más preciso con ascent-override, descent-override y line-gap-override

Si el ajuste de escala genérico de los glifos no es suficiente para tu diseño o estrategias de carga, aquí tienes algunas opciones de ajuste más precisas que funcionan junto con size-adjust. Actualmente, las propiedades ascent-override, descent-override y line-gap-override se implementan en Chromium 87 y versiones posteriores, y en Firefox 89 y versiones posteriores.

tijeras arriba y sopla las anulaciones de palabras, lo que demuestra las áreas que las funciones pueden recortar

ascent-override

Browser Support

  • Chrome: 87.
  • Edge: 87.
  • Firefox: 89.
  • Safari: not supported.

Source

El descriptor ascent-override define la altura de una fuente por encima de la línea base.

@font-face {
  font-family: "Ascent Adjusted Arial Bold";
  src: local(Arial Bold);
  ascent-override: 71%;
}

El título rojo (sin ajustar) tiene espacio sobre las letras A y O en mayúscula, mientras que el título azul se ajustó para que su altura de mayúsculas se ajuste perfectamente al cuadro delimitador general.

descent-override

Browser Support

  • Chrome: 87.
  • Edge: 87.
  • Firefox: 89.
  • Safari: not supported.

Source

El descriptor descent-override define la altura por debajo de la línea de base de la fuente.

@font-face {
  font-family: "Ascent Adjusted Arial Bold";
  src: local(Arial Bold);
  descent-override: 0%;
}

El encabezado rojo (sin ajustar) tiene espacio debajo de las líneas de base de las letras D y O, mientras que el encabezado azul se ajustó para que las letras queden bien apoyadas en la línea de base.

line-gap-override

Browser Support

  • Chrome: 87.
  • Edge: 87.
  • Firefox: 89.
  • Safari: not supported.

Source

El descriptor line-gap-override define la métrica de separación entre líneas para la fuente. Esta es la separación entre líneas o el interlineado externo recomendado para la fuente.

@font-face {
  font-family: "Line Gap Adjusted Arial";
  src: local(Arial);
  line-gap-override: 50%;
}

El título rojo (sin ajustar) no tiene line-gap-override, por lo que se encuentra en 0%, mientras que el título azul se ajustó hacia arriba en un 50%, lo que crea espacio arriba y abajo de las letras según corresponda.

Revisión general

Cada una de estas anulaciones ofrece una forma adicional de recortar el exceso del cuadro de límite de texto seguro de la Web. Puedes personalizar el cuadro de texto para una presentación precisa.

Conclusión

La función @font-face size-adjust de CSS es una forma interesante de personalizar el cuadro delimitador de texto de tus diseños web para mejorar la experiencia de intercambio de fuentes y, así, evitar el cambio de diseño para tus usuarios. Para obtener más información, consulta los siguientes recursos:

Foto de Kristian Strand en Unsplash