¿Por qué las fuentes no se representan igual en un navegador y un terminal?

1

Para ser más específicos, supongamos que tengo una fuente monoespaciada con algunos glifos más grandes que el ancho de caracteres normal (por ejemplo, iconos de fontawesome).

En la mayoría de los emuladores de terminal, los caracteres más grandes simplemente se superponen al carácter de la derecha, mientras que en el cromo, por ejemplo, los caracteres más grandes empujarán el resto de la línea para hacerse espacio.

¿Porqué es eso? ¿Qué representa el texto en esas aplicaciones? ¿Es la aplicación en sí? ¿Es un componente del sistema operativo? ¿Los terminales están específicamente diseñados para evitar este problema?

Y la pregunta complementaria: ¿hay alguna forma de hacer que el cromo se comporte como la mayoría de los terminales, de modo que las fuentes monoespaciadas permanezcan monoespaciadas incluso cuando hay glifos más grandes?

Para proporcionar algunos antecedentes, estoy trabajando en Hyper , que es básicamente un terminal en cromo, y esto está causando problemas con la alineación de los caracteres.

Kaidjin
fuente
1
"¿Qué representa el texto en esas aplicaciones?" - La respuesta a eso es, lamentablemente: depende.
Daniel B
¡Parece un proyecto realmente bonito! :)
egmont
"supongamos que tengo una fuente monoespaciada con algunos glifos más grandes que el ancho de caracteres normal", entonces no es una fuente monoespaciada ... "Una fuente monoespaciada, también llamada fuente de paso fijo, ancho fijo o no proporcional, es una fuente cuyas letras y caracteres ocupan cada uno la misma cantidad de espacio horizontal ".
DavidPostill
@DavidPostill Estoy al tanto de eso gracias. Aún así, hay muchas fuentes monoespaciadas que están parcheadas con glifos de otras fuentes, a menudo íconos. Ver github.com/ryanoasis/nerd-fonts por ejemplo. Esto es útil para hacer bonitos mensajes de terminal, por ejemplo.
Kaidjin

Respuestas:

1

La mayoría de las aplicaciones (incluidos los navegadores) obedecen las dimensiones de los glifos como se define en la fuente. De hecho, probablemente usan métodos que muestran cadenas más largas en un solo paso (aunque no conozco los detalles). Si algunos de los glifos son un poco más anchos que el resto, entonces no es una fuente totalmente monoespacial, es casi monoespacial con algunas excepciones.

Los emuladores de terminal usan un método de dibujo especial, posicionan a cada personaje de forma independiente porque necesitan forzar a los personajes a una cuadrícula, de lo contrario el diseño general simplemente se desmoronaría. Puedes ver esto especialmente bien en acción si eliges una fuente que no sea monoespacio (el resultado se verá feo, pero permanecerá alineado con la cuadrícula). (Tenga en cuenta que konsolepodría ser una excepción, lo he visto haciendo cosas raras).

Para que los navegadores se comporten como emuladores de terminal, le recomiendo que intente colocar cada carácter por separado en sí mismo spano divcon position: absoluteo fixed, o algo similar.

egmont
fuente
1
Gracias, eso confirma lo que pensaba. Ya estamos usando spans en hyperterm para arreglar el comportamiento, desafortunadamente está afectando un poco el rendimiento.
Kaidjin
0

Los sistemas operativos proporcionan una serie de facilidades de dibujo de texto que los desarrolladores pueden elegir. Los emuladores de terminal generalmente requieren fuentes mono espaciadas y la representación de texto que ve es un resultado natural de esta restricción. Los navegadores usan instalaciones más sofisticadas que permiten fuentes proporcionales y mucho más. Eso no significa que se proporcionarán muchas opciones al usuario. Por lo general, se preferiría la representación del navegador que ve. Por supuesto, no todos estarán de acuerdo.

¿Puede Chromium procesar el texto como desee? Lo dudo pero puedes consultar las opciones de texto.

LMiller7
fuente