Вопрос или проблема
У меня странная проблема с Firefox: он отображает спецификацию шрифта "monospace"
как Noto Color Emoji
. Спецификация monospace
выбирает правильный шрифт по умолчанию Noto Sans Mono
в этом случае.
fc-list monospace
возвращает тот же правильный шрифт. Я также не изменял никакие сопоставления, так что не совсем понимаю, откуда это берется. Единственное, что стоит отметить, это то, что fc-list -s monospace
перечисляет шрифт эмодзи как второй результат.
Я замечал эту проблему на нескольких сайтах, так что это не проблема конкретного сайта. ОДНАКО, как вы можете видеть справа, шрифт правильный с той же спецификацией font-family. Я также не смог найти CSS-свойства, которые вызывают эту разницу.
font-family: "Droid Sans Mono", "monospace", monospace
:
font-family: "Droid Sans Mono", monospace
:
(У меня не установлен Droid Sans Mono
, и сайт также не предоставляет его напрямую, поэтому используется запасной вариант).
Для справки, это один из сайтов, где я это видел: https://mermaid.live/edit
Другой пример – веб-IDE GitHub.
Версия Ubuntu: Ubuntu 24.04.2 LTS
Версия Firefox: 136.0 (64-Bit)
(хотя это происходило с тех пор, как я использую эту систему, а это примерно 3 месяца)
.
Ответ или решение
Теория
Рендеринг шрифтов в веб-браузерах, таких как Firefox, является сложным процессом, и он может быть подвержен различным факторам, включая операционную систему, настройки пользователя и доступные шрифты на устройстве. В современных системах, таких как Ubuntu, выбор шрифта осуществляется с использованием библиотек, таких как Fontconfig, которая отвечает за управление и сопоставление шрифтов. Важный аспект, который необходимо понимать: тег font-family
в CSS позволяет указать предпочтительные шрифты, включая конкретные имена шрифтов и семейства, такие как monospace
, serif
или sans-serif
.
Ваш случай с Firefox, рендерящим "monospace"
как Noto Color Emoji
вместо ожидаемого Noto Sans Mono
, может быть связан с приоритетами шрифтов в системе и спецификой работы Fontconfig. Когда браузеры обрабатывают font-family
, они ищут первый подходящий шрифт из перечисления. Если мотивация выбора Firefox не совпадает с вашими ожиданиями, это может значить, что в списке доступны альтернативные шрифты, которые соответствуют требованиям, но не являются визуально предпочтительными.
Пример
В работе Fontconfig, использованной в Ubuntu и подобных операционных системах, каждый тип шрифта отображается в форме списка приоритетов. Ваше наблюдение, что fc-list -s monospace
дает Noto Color Emoji
как второй результат, уже указывает на разность в приоритетных или сопоставляемых шрифтах для семейства monospace
. Это и объясняет странную выборку Firefox. Такой результат может возникнуть из-за особенностей форматов шрифтов, где Noto Color Emoji
содержит глифы, которые отсутствуют в других шрифтах.
Применение
Чтобы решить проблему, нежелательный рендеринг шрифта можно исправить несколькими способами:
-
Настройка приоритетов использования шрифтов в Fontconfig: Создание или изменение существующего файла конфигурации
~/.config/fontconfig/fonts.conf
. Это позволит явно управлять приоритетами использования для всех шрифтов, обеспечивая, чтоNoto Sans Mono
всегда будет рендериться прежде, чемNoto Color Emoji
. Например:<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match> <test name="family" compare="eq"> <string>monospace</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>Noto Sans Mono</string> </edit> </match> </fontconfig>
-
Явное указание шрифтов в CSS: При наличии контроля над CSS-кодом веб-сайтов применять конкретные шрифты в первую очередь, тем самым уменьшив значения обсуждаемых меток, например
font-family: "Droid Sans Mono", "Noto Sans Mono", "monospace"
. -
Обновление и установка шрифта: Обеспечьте наличие всех необходимых моноширинных шрифтов в вашей системе. Это иногда помогает, если проблема возникла из-за отсутствия шрифта, удерживающего основное соответствие.
-
Обновление системы и браузера: Иногда проблемы могут быть устранены обновлениями программного обеспечения. Попробуйте обновить Ubuntu и Firefox до самых последних версий.
Если все предложенные варианты не решают вашу проблему, стремитесь к сообществу разработчиков и форумам поддержки Ubuntu и Mozilla Firefox, чтобы получить помощь и получить дополнительную информацию о возможных бага OS или браузера.