wandres.dev
FUENTES VARIABLES · Ejes y font-variation-settings

Cuándo sale a cuenta una fuente variable

De qué está hecho el archivo, dónde está el punto de equilibrio frente a las estáticas, cómo recortar el espacio de diseño con el instanciador, y la tabla de decisión honesta.

⏱ 16 min

“Un archivo en lugar de seis” es cierto y es una comparación tramposa, porque el archivo variable no pesa lo que una estática: pesa entre dos y tres veces más. El punto de equilibrio está en dos o tres pesos, y la mayoría de los proyectos que adoptan una fuente variable acaban usando exactamente dos. Esta lección es la cuenta que hay que hacer antes, con los números y con el comando que casi nadie ejecuta.

🎯 Al terminar esta lección sabrás
  • Enumerar qué añade una fuente variable sobre una estática dentro del archivo.
  • Calcular el punto de equilibrio para un caso concreto.
  • Recortar ejes y rangos con el instanciador de fonttools.
  • Aplicar una tabla de decisión razonada en lugar de una regla general.

De qué está hecho el archivo

Una fuente variable contiene todo lo que contiene una estática —contornos, tabla de caracteres, kerning, hinting— y además:

  • fvar, la definición de los ejes y de las instancias nombradas.
  • gvar, los deltas de cada punto de cada contorno por cada eje. Esta es, con diferencia, la tabla grande.
  • HVAR y MVAR, las variaciones de las métricas horizontales y generales.
  • Variaciones de las tablas de posicionamiento, para que el kerning siga siendo correcto en cada instancia.

gvar crece con el número de ejes y con el número de másters. Un eje de peso con tres másters añade bastante; tres ejes con másters en las esquinas del espacio añaden mucho más, porque los deltas se combinan.

Los órdenes de magnitud, con un subconjunto latino y en woff2:

archivo peso típico
estática, un peso 15 a 25 KB
variable, un eje de peso 35 a 60 KB
variable, dos ejes 55 a 90 KB
variable, tres o más ejes 70 a 140 KB

El punto de equilibrio

Con esos rangos, la cuenta es directa. Tomando 20 KB por estática y 45 KB por variable de un eje:

pesos que necesitas estáticas variable gana
1 20 KB 45 KB estáticas
2 40 KB 45 KB empate
3 60 KB 45 KB variable
5 100 KB 45 KB variable, de lejos

Y ahora la parte que estropea la cuenta bonita: la cursiva es otro archivo. Una familia variable completa son dos archivos, redonda y cursiva. Rehaciendo la tabla con cursivas:

lo que necesitas estáticas variable
regular y negrita 40 KB 45 KB
regular, negrita y sus cursivas 80 KB 90 KB
cuatro pesos y sus cursivas 160 KB 90 KB

Con dos pesos y cursivas, las estáticas ganan. Es exactamente la configuración más frecuente en un sitio de contenido, y es la razón por la que la respuesta correcta a “¿usamos variable?” tantas veces es que no.

Los casos donde la variable gana sin discusión son tres: muchos pesos, animar un eje —imposible con estáticas— y necesitar anchura u óptico, que las estáticas no ofrecen a menos que compres cortes condensados aparte.

Recortar el espacio de diseño

Aquí está la herramienta que cambia la cuenta y que casi nadie usa: una fuente variable se puede recortar antes de servirla. El instanciador de fonttools fija ejes o limita rangos y reescribe el archivo con los deltas que sobran eliminados.

# limitar el eje de peso al rango que de verdad usas
python3 -m fontTools.varLib.instancer texto-var.ttf \
  wght=300:700 \
  -o texto-300-700.ttf

# fijar un eje en un valor y eliminarlo del archivo
python3 -m fontTools.varLib.instancer texto-var.ttf \
  wght=300:700 opsz=16 wdth=100 \
  -o texto-recortada.ttf

La sintaxis distingue dos operaciones. wght=300:700 limita el eje: sigue siendo variable, con menos recorrido y menos deltas. opsz=16 fija el eje: deja de ser variable, se aplica ese valor y la tabla de variaciones correspondiente desaparece.

El ahorro típico de recortar un eje que no usabas está entre el 20% y el 40% del archivo. Es un comando, se ejecuta una vez en la construcción, y después hay que volver a subconjuntar y convertir a woff2:

pyftsubset texto-recortada.ttf \
  --unicodes="U+0000-00FF,U+2000-206F,U+20AC" \
  --layout-features="kern,liga,clig,calt,ccmp,mark,mkmk" \
  --flavor=woff2 \
  --output-file=texto.woff2

El orden importa: primero instanciar, después subconjuntar, y la conversión a woff2 al final.

La tabla de decisión

situación elección
uno o dos pesos, sin cursiva estáticas
dos pesos con sus cursivas estáticas, por poco
tres o más pesos variable
animar el peso o el grado variable, no hay alternativa
necesitas anchura o tamaño óptico variable
tipografía de sistema ninguna de las dos, y ahorras todo

Y por encima de la tabla, la disciplina que la sustituye: mídelo tú. Genera los dos juegos con el mismo subconjunto y las mismas características de OpenType, y compara los tamaños reales. Cinco minutos de trabajo dan un número exacto para tu fuente concreta, y las tablas generales, esta incluida, dejan de hacer falta.

ℹ️
La fuente de sistema sigue siendo la opción más rápida

font-family: system-ui no descarga nada, se pinta en el primer fotograma, no tiene FOIT ni FOUT, no consume presupuesto y en cada plataforma es una tipografía cuidadosamente diseñada para pantalla. Para una herramienta interna, un panel de control o cualquier interfaz donde la marca no aporte, es una elección técnica excelente que además se toma en cero minutos. Compararla con la alternativa antes de empezar el trabajo de optimización evita optimizar algo que no hacía falta.

El archivo variable solo es más pequeño si de verdad ibas a usar todo lo que trae

El argumento comercial de las fuentes variables compara un archivo contra seis, y esa comparación solo es válida si realmente ibas a servir seis. Lo que ocurre en la práctica es otra cosa, y es un patrón tan repetido que merece nombre propio: el equipo adopta la variable porque “es más eficiente”, diseña con la libertad de tener nueve pesos disponibles, y acaba usando dos en el noventa por ciento de la interfaz —porque las jerarquías reales no necesitan nueve— con lo que ha servido un archivo que pesa el doble de lo necesario para lograr exactamente lo que dos estáticas habrían dado por menos. La ironía es que el remedio es un solo comando de instancer que nadie ejecuta, porque el archivo llegó del proveedor como un artefacto terminado y a nadie se le ocurre que se puede recortar. La lección se generaliza más allá de la tipografía: un formato que ofrece capacidad no usada te está cobrando por ella, y la pregunta que separa la ingeniería de la adopción por moda es siempre la misma, “¿qué parte de esto voy a usar de verdad?”, seguida de la incómoda, “¿y qué me costaría eliminar el resto?”. Con las fuentes variables la respuesta a la segunda es media hora de trabajo en el proceso de construcción, y sale mucho más a cuenta que cualquier ajuste de font-display.