Почему Chrome в Linux отображает неправильный вес шрифта? - PullRequest
0 голосов
/ 28 октября 2018

Мой веб-сайт имеет следующий базовый шрифт:

body {
  font:300 16px/1.5 Ubuntu,sans-serif;
  ...
}

Шрифт загружается с помощью Google Fonts:

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:300,300i,700,700i&amp;subset=greek,greek-ext">

В большинстве браузеров ожидается все шрифты.Однако в Chrome для Linux я вижу основной шрифт, отображаемый с размером шрифта 500 вместо 300. На снимке экрана показано, о чем я говорю.Нормальный текст слишком тяжелый.Текст, выделенный курсивом, отображается с правильным весом (и создается с использованием тегов <em> без стиля).Это также показывает, что Chrome понимает, что он должен использовать вес 300.

Example of wrong font

Эта проблема не появляется в Chrome на Windows или MacOS--только линуксКроме того, я видел это в старой версии Chrome (48.0.2564.116), а также в текущей версии Chrome (70.0.3538.67).У меня нет проблем с Firefox, Edge или Opera на любой ОС, которую я тестировал.Моя Linux-машина работает под управлением Ubuntu 16.04.Кроме того, Chrome правильно отображает шрифт Ubuntu на любом весе на fonts.google.com.

Есть идеи, что может произойти?

1 Ответ

0 голосов
/ 30 апреля 2019

Это связано с ошибкой в ​​Linux (возможно, только с Ubuntu).

Как я ее решил: URL-адрес Googlefonts извлекает простой текст правил css font-face (вы можете увидеть это, если просто вызватьэто из браузера).Они содержат srcs, где искать шрифты в порядке приоритета.Googlefonts сначала ищет локальные шрифты, а затем, если они не существуют, извлекает их из удаленных местоположений:

@font-face {
  font-family: 'Ubuntu';
  font-style: normal;
  font-weight: 300;
  src: local('Ubuntu Light'), local('Ubuntu-Light'), url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoC1CzjsGyN.woff2) format('woff2');
  unicode-range: U+0000-00FF, ...
}

Как правило, это хорошая идея, поскольку извлечение уже установленных в системе шрифтов не требуется и замедляет работу.загрузка страницы вниз.Однако в Ubuntu есть известная ошибка, которая приводит к загрузке неверно установленных шрифтов: https://bugs.launchpad.net/ubuntu/+source/fonts-ubuntu/+bug/1512111 Имена шрифтов в Googlefonts на самом деле правильные, но по какой-то причине ОС не обрабатывает их правильно.Таким образом, у Google нет способа исправить это с их стороны.

Мое решение состоит в том, чтобы просто удалить локальные srcs, чтобы немедленно получить шрифты с удаленного компьютера.(Мне действительно интересно, почему Google не предлагает вариант «пропустить локальные шрифты» по умолчанию, возможно, они не хотят тратить свои ресурсы впустую.) В этом случае это, вероятно, даже не имеет значения с точки зрения производительности, потому что все другие системы, кроме Ubuntuв любом случае не используйте его в качестве локального шрифта.

Вот как я пропускаю локальные шрифты, используя Javascript:

fetch('https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700')
  // get browser/OS specific googlefont font-face file and convert to string to make adjustments
  .then(res => res.text())
  .then(googleFonts => {
    // remove "local" src locations to force using remote (or browser-cached) fonts (no locally installed system fonts)
    googleFonts = googleFonts.replace(/local(.*),\s/g, '')

Примечание. Важно не просто копировать CSS, когда вы смотрите наэто в браузере, потому что оно варьируется в зависимости от браузера / ОС - вот в чем смысл Googlefonts.

Примечание: я не уверен, как использовать это в HTML, но учитывая, что JS генерирует простой текст, он долженлегко разобраться с @ssort из файла CSS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...