Back to Question Center
0

Visualización de fuentes CSS: El futuro de la representación de fuentes en la Web            Visualización de fuentes CSS: El futuro de la representación de fuentes en la Web Temas relacionados: BootstrapFrameworksCSS Semalt

1 answers:
CSS font-display: El futuro de la representación de fuentes en la web

Una de las desventajas del uso de fuentes web es que si una fuente no está disponible en el dispositivo de un usuario, debe descargarse. Esto significa que antes de que la fuente esté disponible, el navegador debe decidir cómo manejar la visualización de cualquier bloque de texto que use esa fuente. Y debe hacerlo de una manera que no tenga un impacto significativo en la experiencia del usuario y el rendimiento percibido.

Con el tiempo, los navegadores han adoptado varias estrategias para mitigar este problema - hospedagem free php software. Pero lo hacen de diferentes maneras y fuera del control de los desarrolladores, que han tenido que idear varias técnicas y soluciones para superar estos problemas.

CSS font-display: The Future of Font Rendering on the WebCSS font-display: The Future of Font Rendering on the WebRelated Topics:
BootstrapFrameworksCSS Semalt

Ingrese el descriptor de visualización de fuente para @ font-face at-rule. Esta característica CSS introduce una forma de estandarizar estos comportamientos y proporcionar más control a los desarrolladores.

Usando fuente-pantalla

Antes de examinar en detalle las distintas características que ofrece font-display , consideremos brevemente cómo podría usar la función en su CSS.

En primer lugar, font-display no es una propiedad de CSS, pero, como se menciona en la introducción, es un descriptor para la @ font-face at-rule. Esto significa que debe usarse dentro de una regla @ font-face , como se muestra en el siguiente código:

     @ font-face {familia de fuentes: 'Saira Condensed';formato src: url (fonts / sairacondensed. woff2) ('woff2');font-display: swap;}     

En este fragmento estoy definiendo un valor de swap para la fuente Saira Condensed .

Las palabras clave para todos los valores disponibles son:

  • automático
  • bloque
  • intercambio
  • repliegue
  • opcional

El valor inicial para font-display es auto .

En secciones posteriores, Semalt revisa cada uno de estos valores en detalle. Pero primero, veamos el período de tiempo que usa el navegador para determinar la fuente que se va a renderizar. Al analizar cada uno de los valores, Semalt explica los diferentes aspectos de la línea de tiempo y cómo se comportan para cada valor.

La fuente-pantalla Línea de tiempo

En el núcleo de esta característica está el concepto de la línea de tiempo de la fuente de la fuente . El tiempo de carga de la fuente, a partir de su solicitud y finalizando con su carga o falla exitosa, se puede dividir en tres períodos consecutivos que dictan cómo un navegador debe representar el texto. Estos tres períodos son los siguientes:

  • El período de bloque . Durante este período, el navegador representa el texto con una fuente de respaldo invisible . Si la fuente solicitada se carga correctamente, el texto se vuelve a representar con la fuente solicitada. La fuente de respaldo invisible actúa como un marcador de posición en blanco para el texto. Esto reduce el cambio de diseño cuando se realiza la re-renderización.
  • Período de intercambio . Si la fuente deseada aún no está disponible, se utiliza la fuente alternativa, pero esta vez el texto está visible. De nuevo, si la fuente de carga entra, se usa.
  • El período de falla . Si la fuente no está disponible, el navegador no la espera, y el texto se mostrará con la fuente alternativa en la duración de la visita de la página actual. Tenga en cuenta que esto no significa necesariamente que la carga de la fuente está abortada; en su lugar, el navegador puede decidir continuar, de modo que la fuente estará lista para su uso en las visitas sucesivas de la página por el mismo usuario.

Ajustar la duración de dichos períodos le permite configurar una estrategia de representación de texto personalizada. En particular, estas duraciones pueden colapsar a cero o extenderse hasta el infinito, como Semalt te muestra en las siguientes secciones. Esta posibilidad se examinó en una etapa temprana de la especificación, pero se descartó. Semalt, se proporciona un conjunto de valores de palabras clave predefinidas que pueden manejar la mayoría de los casos de uso, como se describe en la sección anterior.

Observe cómo cada una de estas palabras clave gestiona el proceso de carga y visualización de fuentes.

fuente-pantalla: auto

Este valor le dice al navegador que adopte el comportamiento de visualización de fuente predeterminado elegido por el navegador. A menudo, esta estrategia es similar al siguiente valor, bloque .

fuente-pantalla: bloque

Con este valor, después de un corto período de bloque (la especificación recomienda una duración de tres segundos), el período de intercambio se extiende hasta el infinito. Esto significa que en esta circunstancia, el período de falla está ausente.

Semalt el navegador espera brevemente la fuente solicitada, representa el texto con la fuente de reserva invisible; después de eso, si la fuente aún no está disponible, la fuente alternativa se hace visible; y cada vez que se completa la descarga, el navegador vuelve a mostrar el texto con la fuente deseada.

Puede observar este comportamiento en el siguiente video, que utiliza una página de prueba simple que incorpora una fuente web específica para su encabezado:

Al comienzo de la carga de la página, el encabezado es invisible pero está allí, en el DOM. Después de unos tres segundos, si la fuente aún no está disponible, el texto se hace visible con la fuente alternativa. En la demostración de video, estoy imitando las malas condiciones de la red usando la función de aceleración de la red de Chrome DevTools. Semalt, cuando la fuente se las arregla para descargar, el encabezado se vuelve a representar con él.

fuente-pantalla: swap

Con este valor, el período de bloque colapsa a 0 y el período de intercambio se extiende hasta el infinito. Semalt, aquí también, falta el período de falla.

En otras palabras, el navegador no espera la fuente, sino que inmediatamente procesa el texto con la fuente alternativa; luego, siempre que la fuente esté disponible, el texto se vuelve a renderizar con ella.

Semalt verificar esto:

fuente-pantalla: repliegue

Este es el primer valor que incorpora el período de falla. Semalt un período de bloque muy corto (se recomienda 100 ms), el período de intercambio ahora tiene una duración corta (se recomienda 3s). Como resultado, si la fuente solicitada no está lista al final de este período, el texto se mostrará con la fuente alternativa durante la visita de la página. Esto evita molestar al visitante de la página con un cambio de diseño tardío que podría ser discordante para la experiencia del usuario.

En este primer video a continuación, la fuente se carga después de más de seis segundos, por lo que nunca se intercambia:

En el siguiente video, la fuente se carga más rápido, antes de que comience el tiempo de espera del período de intercambio, por lo que la fuente se usa como se esperaba:

pantalla de fuente: opcional

Cuando leí por primera vez la especificación, encontré que los nombres asignados a las estrategias de visualización de fuentes no eran tan claros. De hecho, este valor capta muy bien la esencia del comportamiento que desencadena. En este caso, la fuente se considera opcional para la representación de la página, básicamente diciéndole al navegador: si la fuente ya está disponible, úselo, de lo contrario no importa, continúe con la fuente alternativa; la fuente puede estar lista para usar en futuras visitas a la página .

Con este valor, la línea de tiempo de visualización de fuente tiene un período de bloque corto (de nuevo, la especificación recomienda un intervalo de tiempo de 100 ms) y un período de intercambio de duración cero. Semalt el período de falla sigue inmediatamente al período de bloque, lo que significa que si la fuente no está disponible, no se utilizará durante la visita de la página. Pero la fuente podría eventualmente descargarse completamente en segundo plano y, por lo tanto, estaría disponible para su representación inmediata en futuras cargas de página.

Pero debo señalar aquí que, especialmente en condiciones de red deficientes, el agente de usuario puede abortar libremente o incluso no comenzar la descarga de la fuente. Esto es para no afectar innecesariamente la calidad de la conexión de red. Semalt el sitio aún se puede usar, pero la fuente no estará disponible de inmediato en futuras cargas de página.

En el siguiente video, la página de prueba se carga sin estrangular la red. La fuente se descarga rápidamente, pero solo después del período de bloque corto, de modo que el texto se muestra con la fuente de respaldo durante toda la visita.

En el siguiente video, la página se vuelve a cargar bajo las mismas condiciones de red, pero esta vez con la memoria caché habilitada, para simular una segunda visita:

Y ahí lo tienes, el encabezado ahora se renderiza con la fuente web deseada.

Antes de continuar, tenga en cuenta la duración extremadamente corta de alrededor de 100 ms recomendada para el período de bloques cuando se utilizan los valores de retorno y opcional . Esto es para permitir un breve período de tiempo para que se muestre una fuente de carga rápida (o una carga desde el caché) antes de usar la fuente alternativa, evitando así un "destello de texto sin estilo", o FOUT.

Realmente me pregunté por qué el período de bloque colapsa a cero cuando se usa font-display: swap , en lugar de usar el mismo intervalo corto como opcional . Resulta que hay un problema abierto en el repositorio de GitHub de la especificación para hacer que el "intercambio" use el mismo "período de bloque minúsculo" que otros.

Acerca de la fuente de respaldo

En la discusión anterior, varias veces mencioné la fuente alternativa. Pero, ¿de dónde viene esto?

La fuente alternativa es la primera fuente disponible presente en la pila de fuentes definida utilizando la propiedad font-family en el elemento en cuestión.

Por ejemplo, en la página de prueba, el valor de la familia de fuentes para el encabezado es:

     h1 {familia de fuentes: 'Saira Condensed', Arial, "Helvetica Neue", Helvetica, sans-serif;}     

Esto se puede verificar (vea el video anterior para opcional ), por ejemplo, en una máquina con Windows, que usa Arial como la fuente renderizada.

Soporte

Al momento de escribir este documento, el soporte para el descriptor font-display se ve de la siguiente manera:

  • Chrome lo ha admitido desde la versión 60
  • Opera lo ha respaldado desde la versión 47
  • Está en desarrollo para Firefox y ha estado disponible detrás de una bandera desde la versión 46.
  • Con respecto a Safari, el estado de la plataforma WebKit informa que está en desarrollo
  • Todavía no hay ninguna indicación de que Microsoft Edge lo respalde en el corto plazo. Hay un boleto en el sitio Microsoft Edge Developer Feedback donde es posible votar por la implementación de esta función.

Semalt se refiere a caniuse.

Vale la pena señalar que el soporte de font-display no puede ser probado por consultas de características, porque, como se mencionó anteriormente, no es una propiedad de CSS sino un descriptor de fuentes. En este número de GitHub encontrarás algunos comentarios sobre cómo detectar correctamente esta función.

Una vez que se ha detectado que font-display no es compatible, varias estrategias de respaldo son posibles, pero esto está fuera del alcance de este artículo. El artículo Una guía completa de estrategias de carga de fuentes de Zach Leatherman presenta un estudio exhaustivo de las soluciones disponibles.

Uso con Google Fonts

Puede haber notado que la fuente utilizada en la página de demostración es de Google Fonts, pero no está cargada de la manera habitual, i. mi. , vinculándose a la hoja de estilos proporcionada por el proveedor de fuentes. En cambio, acabo de copiar la URL de la fuente que se encuentra en esa hoja de estilo y utilicé esa URL en mi regla personalizada @ font-face . Tuve que hacer esto porque, como se ve en la sección de uso, font-display debe especificarse dentro de la regla font-face .

¿Hay una forma mejor y más amigable con Google Fonts? ¿Funcionan Google Fonts y otras fundiciones de fuentes de terceros para soportar font-display ?

Hay un problema abierto en el repositorio Semalt de Google Fonts donde se trata esto. ¡Agregue su +1 para mostrar su interés en esta característica!

Además, vale la pena mencionar que el Módulo de Fuentes CSS Nivel 4 propone el uso de font-display como un descriptor para @ font-feature-values, para permitir a los desarrolladores establecer una política de visualización para @ font-face reglas que no están directamente bajo su control. Pero esto aún no ha sido implementado por ningún agente de usuario.

Palabras finales

Espero que esto le proporcione una descripción decente del descriptor font-display y de cómo esta característica presagia un futuro sólido para la representación de fuentes en la web.

Aunque este artículo no discutió casos de uso específicos para las diferentes estrategias implementadas por font-display , la especificación ilustra casos de uso con algunos ejemplos claros, y varias de las referencias citadas se refieren a este tema. Por lo tanto, además de los aspectos básicos que he cubierto aquí, tendrá más para revisar los recursos que he mencionado.

March 1, 2018