Исправляем кривой рендер шрифтов в Firefox

Огненный лис — firefox уже давно не торт…, но сегодня я заметил, что шрифт Poppins от Google Fonts в верстке моего проекта отображается криво и по разному на Mac и Windows системах. Поэтому пришлось все исправлять…

Естественно, каждый браузер имеет свои причуды, и одна из причуд Firefox — отображать regular шрифты в полужирном/жирном варианте. Честно, я и раньше не слишком «парился» по этому поводу т.к небольшие различия были, но они были не критичными. Например, ниже приведу пример рендера шрифта VK из в Firefox и Chrome браузеров (слева направо):

Forefox "утолщает" regular шрифт

 

Видно утолщение? В принципе да. Раздражает? Да, даже очень. Поскольку в VK исправить не удастся, придется возвращаться и исправлять на своей верстке 😆

Если разбираться в проблеме поглубже, то такой баг, происходит на полужирных Google Fonts (semibold) в Firefox на Mac, а в Windows на медиум шрифтах (medium). Также, проблемы появляются если вы в верстке используете Typekit. В любом случае я потратил немного времени и составил короткий список шрифтов, которые неправильно отображаются в Firefox:

  • Droid Sans
  • Gill Sans
  • Montserrat
  • Poppins
  • Proxima Nova

Решение проблемы отображения bold шрифтов в Firefox

На самом деле, проблема решается в пару css строк:

html {
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  font-smoothing: antialiased;
  font-weight: 400; /*эту строчку можно пропустить*/
}

/*Правило только для Firefox*/
@-moz-document url-prefix() {
  body {
    font-weight: lighter !important;
  }
}

-moz префиксы работают только для Firefox, а -webkit соответственно только на Chrome и Safari которые используют Webkit движок рендеринга для этих браузеров.

Также, есть решение и для Internet Explorer, который также имеет проблемы с некоторыми шрифтами и делает их толще:

html {
  text-rendering: optimizeLegibility;
}

Решение на SASS

Также, накидал простое решение на sass в виде миксина, которое также решает проблему как и css выше.

@mixin font-smoothing($value: antialiased)
  @if $value == antialiased
    -webkit-font-smoothing: antialiased
    -moz-osx-font-smoothing: grayscale
  @else
    -webkit-font-smoothing: subpixel-antialiased
    -moz-osx-font-smoothing: auto

Подписаться на новые статьи