Tutorial WordPress: Evitar saltos de diseño al cargar fuentes con font-display

·

·

Introducción: por qué evitas saltos de diseño al cargar fuentes

Los saltos de diseño (layout shifts) al cargar fuentes son una causa frecuente de mala experiencia de usuario y de un aumento del valor de Cumulative Layout Shift (CLS) en mediciones de rendimiento. En WordPress, donde los temas y plugins suelen cargar fuentes externas o autoalojadas, es habitual que el texto cambie de altura o peso cuando la webfont llega, provocando reflujo de contenido, botones que cambian de posición o páginas que “brincan” al terminar la carga.

Este artículo explica en detalle qué provoca esos saltos y cómo evitarlos usando font-display junto a otras prácticas recomendadas (preload, stack de fuentes adecuado, autoalojamiento y ajustes de métricas), con ejemplos listos para integrar en un tema o plugin de WordPress.

Conceptos clave

Cómo funciona font-display y qué opción elegir

El descriptor @font-face { font-display: … } permite elegir la política de renderizado:

Recomendación general: usar font-display: swap o optional (según estrategia de prioridad) y complementar con preload, stack de fallback que coincida en métricas y, cuando sea posible, autoalojar y subsetting de fuentes.

Pasos prácticos para evitar saltos (resumen)

  1. Autoalojar la fuente (preferible) o controlar la URL de Google Fonts con display=swap.
  2. Preload de la fuente crítica con rel=preload as=font crossorigin en la cabecera.
  3. Declarar @font-face con font-display: swap y formatos modernos (woff2).
  4. Asegurar stack de fallback que coincida lo más posible en métricas (sans-serif compatible).
  5. Opcional: usar ajuste de métricas (size-adjust/ascent-override) si el navegador lo soporta.
  6. Medir CLS con Lighthouse/Chrome DevTools y probar redes lentas para validar comportamiento.

Ejemplo 1 — @font-face autoalojada con font-display y preload

Código CSS para declarar una fuente woff2 con font-display: swap. Incluye el enlace de preload que debe ir en la cabecera (head).

/ @font-face declarado en tu archivo CSS principal o inline en head /
@font-face {
  font-family: MiFuente
  src: url(/wp-content/themes/mi-tema/fonts/mifuente.woff2) format(woff2)
  font-weight: 100 900
  font-style: normal
  font-display: swap
  / Opcional: size-adjust/ascent-override (soporte parcial, comprobar compatibilidad) /
  / size-adjust: 100% /
}

/ Uso en tu CSS /
body { font-family: MiFuente, system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif }

En la cabecera (head) añade el preload de la fuente crítica. En WordPress se puede imprimir este link en functions.php como se muestra más abajo.


Ejemplo 2 — Añadir preload desde functions.php (WordPress)

Una forma sencilla de inyectar el link rel=preload desde el tema es engancharse a wp_head. Pega esto en functions.php de tu tema (o child theme).

n
}
?>

Notas sobre el preload

Ejemplo 3 — Google Fonts: usar display=swap y preload

Si usas Google Fonts, añade display=swap a la URL para que el servidor genere font-display=swap en sus @font-face. Además puedes preconnect a fonts.gstatic.com para acelerar la conexión y opcionalmente preload de la fuente woff2 (implementar con cuidado porque Google suministra nombres generados).






Si prefieres control total y menor latencia, descarga y autoalojar los .woff2 de Google Fonts y aplica la estrategia anterior (preload font-display).

Combinar font-display con fallback y stacks con métricas similares

Para minimizar cambios de layout cuando se aplica la webfont, es fundamental elegir un fallback que tenga métricas cercanas (altura de x, ancho medio). Por ejemplo, si tu web usa una sans geométrica moderna, prioriza Roboto/Inter/system-ui en la pila y evita caer a una serif muy distinta.

/ Ejemplo de stack mitigando cambios de ancho/alto /
h1, h2, p {
  font-family: MiFuente, Inter, system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif
}

Opciones avanzadas: ajustar métricas y variable fonts

Existen técnicas más avanzadas para evitar SHIFT al reemplazar fuentes:

Implementación práctica completa en WordPress (paso a paso)

  1. Decide si usarás Google Fonts o autoalojarás. Autoalojar da mayor control sobre preload y CORS.
  2. Genera/descarga los .woff2 necesarios (subsetting recomendado).
  3. Sube los archivos a /wp-content/themes/tu-tema/fonts/ o a un CDN con CORS correctamente configurado.
  4. En functions.php añade la inserción del preload en head (ejemplo arriba) y encola tu hoja de estilos normalmente.
  5. En tu CSS principal declara @font-face con font-display: swap y formatos woff2.
  6. Define un stack de fallback que coincida en métricas y aplica estilos críticos inline si es necesario (CSS crítico en head para evitar cambios al pintar por primera vez).
  7. Prueba en Lighthouse y con throttling de red en DevTools (simula conexiones 3G/Slow-3G) y comprueba CLS asegúrate de revisar páginas con contenido dinámico (ads, embeds) que también pueden causar shifts).

Medición y validación

Para comprobar que los cambios funcionan:

Plugins y utilidades útiles en WordPress

Consideraciones y trade-offs

Checklist final para producción

Resumen

Evitar saltos de diseño al cargar fuentes en WordPress se logra con una combinación de políticas de renderizado (font-display), priorización de recursos (preload/preconnect), un stack de fallback cuidado y, cuando es posible, autoalojamiento y subsetting. font-display: swap es la opción más práctica para reducir CLS, y siempre debe complementarse con preload y pruebas reales para garantizar que la web mantiene estabilidad visual al cargar las webfonts.



Leave a Reply

Your email address will not be published. Required fields are marked *