Объявления @font-face не работают в интернет-браузере Android 4.3?

Мой телефон Samsung Galaxy S3 недавно обновился с Android 4.1.3 до Android 4.3. Теперь несколько веб-сайтов, которые я разработал и протестировал в интернет-браузере Android, не отображают шрифты, которые я объявил с помощью @font-face. Что мне нужно сделать, чтобы исправить это?

Один из сайтов (разработка): http://beta.kdfansite.com

Вот некоторые из связанных CSS для Open Sans:

@font-face {
    font-family: 'OpenSansSemibold';
    src: url('http://beta.kdfansite.com/wp-content/themes/scrollider/scrollider/webfonts/Open-Sans/OpenSans-Semibold-webfont.eot');
    src: url('http://beta.kdfansite.com/wp-content/themes/scrollider/scrollider/webfonts/Open-Sans/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'),
         url('http://beta.kdfansite.com/wp-content/themes/scrollider/scrollider/webfonts/Open-Sans/OpenSans-Semibold-webfont.woff') format('woff'),
         url('http://beta.kdfansite.com/wp-content/themes/scrollider/scrollider/webfonts/Open-Sans/OpenSans-Semibold-webfont.ttf') format('truetype'),
         url('http://beta.kdfansite.com/wp-content/themes/scrollider/scrollider/webfonts/Open-Sans/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg');
    font-weight: normal;
    font-style: normal;
}

/* ... */

h2 {
    font-family: 'OpenSansSemibold', Arial, sans-serif;
    /* ... */
}

Каждый шрифт, который я использую на сайте, объявляется аналогичным образом. Декларация Great Vibes (также в custom.css) для сообщения «наслаждайтесь поездкой» — еще одно сравнение. Все шрифты правильно отображаются в Chrome для Android и Firefox для Android на одном устройстве, но не в Интернете Android.

Мне нужно завершить этот CSS как можно скорее, и я работаю над этим проектом в качестве волонтера (не оплачивается). Поэтому я ищу быстрое решение, а не обзор кода. Я также UX-дизайнер, а не веб-разработчик. Заранее спасибо.

Редактировать: сегодня я провел дополнительную отладку в Edge Inspect CC и weinre, подключив к ноутбуку телефон Android и iPad. В Weinre я могу менять семейства шрифтов на iPad, но не на телефоне. Я могу изменить цвет шрифта на обоих устройствах. Таким образом, похоже, что основная проблема связана с тем фактом, что я не могу изменить шрифты по умолчанию, когда использую удаленный отладчик.


person David    schedule 02.01.2014    source источник
comment
и вот мне интересно, почему мой S3 не получает это обновление Android 4.3   -  person Huangism    schedule 02.01.2014
comment
Возможен дубликат? Просмотрите эту страницу SO: stackoverflow.com/questions /16223771/   -  person Phlume    schedule 02.01.2014
comment
@Phlume - я думал об этом, но у меня другая версия Android (4.3). Этот вопрос также относится к интернет-браузеру Android по умолчанию. Мой отлично работал в Android 4.0 и 4.1, а также в Chrome/Firefox для Android.   -  person David    schedule 02.01.2014
comment
Справедливо. Что касается этого сообщения, формат SVG также не работал на вашем? Я спрашиваю только потому, что, когда я проверял ваш путь svg, в результате ничего не происходило... в отличие от .ttf или .eot, которые предлагают загрузить файл.   -  person Phlume    schedule 02.01.2014
comment
Я видел то же самое с файлом .svg на нескольких других сайтах (я попробовал Font Squirrel и сайты нескольких других дизайнеров), но все эти сайты правильно отображали шрифты в браузере Android. Единственное, что казалось другим, это то, что эти сайты использовали относительные пути для своих шрифтов, но когда я внес это изменение на свой сайт, шрифты по-прежнему правильно отображались на моем ноутбуке и неправильно на моем телефоне.   -  person David    schedule 03.01.2014


Ответы (6)


У меня такая же проблема, как я ее решаю.

Я использую svg только на мобильных устройствах с медиа-запросами.

@media only screen and (max-width: 320px) {
@font-face {
    font-family: 'open_sansbold';
    src: url('OpenSans-Bold-webfont.svg#open_sansbold') format('svg');
    font-weight: normal;
    font-style: normal;
}
}
@media only screen and (max-device-width: 720px) and (orientation:portrait) {
    @font-face {
        font-family: 'open_sansbold';
        src: url('OpenSans-Bold-webfont.svg#open_sansbold') format('svg');
        font-weight: normal;
        font-style: normal;
    }

}
@media only screen and (max-device-width: 1280px) and (orientation:landscape) {
    @font-face {
        font-family: 'open_sansbold';
        src: url('OpenSans-Bold-webfont.svg#open_sansbold') format('svg');
        font-weight: normal;
        font-style: normal;
    }
}

Надеюсь, это поможет вам.

person Beauceron    schedule 10.01.2014
comment
Спасибо и добро пожаловать! Это большая помощь. Он работает во всех браузерах, которые я тестировал: Chrome, Firefox, IE и Safari для настольных компьютеров; Safari и Chrome для iPad; Интернет для Android и Chrome для Android. Единственный протестированный мной браузер, в котором он не работает, — это Firefox для Android. Вы сразу знаете, есть ли способ исправить это, не ломая его в других браузерах? - person David; 11.01.2014
comment
Кроме того, поскольку тела медиазапросов одинаковы, запись медиазапроса как @media only screen and (max-width: 320px), screen and (max-device-width: 720px) и (orientation:portrait), screen и (max-device-width: 1280px) и (ориентация: альбомная) сохранят код. Меня это беспокоило, потому что на моем сайте используется несколько шрифтов. - person David; 11.01.2014
comment
Вы, сэр, настоящая легенда!! Спасибо большое!! - person axsauze; 01.03.2014
comment
это прекрасно работает, но персидские символы не склеиваются - person h0mayun; 30.11.2014

Мы столкнулись с похожей проблемой, и это было вызвано тем, что мы использовали text-rendering: optimizeLegibility — удаление этого из нашего CSS заставило наши шрифты снова начать работать на 4.3.

person BenV    schedule 18.04.2014
comment
Так было и в нашем проекте. Samsung Galaxy S3 под управлением 4.3 с файлами шрифтов eot и woff. Спасибо! - person Sampsa; 14.05.2014
comment
Подтверждено на 4.3 с помощью Galaxy S3. - person Eric; 15.07.2014
comment
Подтвердил на 4.4.2 андроид, спасибо большое чувак, не ожидал такого - person vaskort; 04.11.2015

Я создаю jsfiddle только со шрифтами svg и woff и тестирую его на своем устройстве Android 4.3 в браузере по умолчанию. Все работает.

Я просто удаляю все ненужные шрифты для мобильных устройств. Все мобильные поддерживают svg шрифты, FF и IE10 потребности woff. Таким образом, вы можете использовать медиа-запросы для отдельного определения шрифта: для мобильного и для рабочего стола.

Если вам нужны все типы шрифтов, проверьте заголовок Content-Type для файлов шрифтов, это всегда text/plain, что неверно:

  • eot имеет тип application/vnd.ms-fontobject
  • otf и ttf имеют тип application/octet-stream
  • woff имеет тип application/font-woff
  • svg имеет тип image/svg+xml

Также посетите эту страницу, чтобы прочитать об известных распространенных проблемах с font face .

person Pinal    schedule 05.01.2014
comment
Это все еще работает для всех основных веб-браузеров на рабочем столе? Я не хочу чинить шрифты для одного типа устройств и ломать их для другого, поэтому сегодня буду тестировать. - person David; 06.01.2014
comment
У меня работает jsfiddle, но когда я внес изменения в свой файл CSS и повторно протестировал сайт на своем телефоне, это не сработало. - person David; 06.01.2014
comment
На вашем сайте beta.kdfansite.com появились новые изменения? - person Pinal; 07.01.2014
comment
В текущей версии используется исправление, рекомендованное мне FontSquirrel. Они хотели, чтобы я попробовал их версию без абсолютных путей. Версия в вашем jsfiddle у меня не работала с абсолютными или относительными путями. Сейчас я изучаю заголовки Content-Type. - person David; 07.01.2014
comment
Я не уверен, как изменить заголовки Content-Type для шрифтов. Это не было очевидно из кода HTML или CSS сайта. Где бы я мог это сделать? - person David; 08.01.2014
comment
Какой веб-сервер вы используете? - person Pinal; 08.01.2014
comment
На сайте используется общий стандартный сервер Apache 2. Поскольку он является общим, мы не имеем над ним никакого контроля. - person David; 09.01.2014
comment
Хорошо, вернемся к вашей проблеме и моему jsfiddle. Я проверил свой jsfiddle на S3 (Android 4.1) и Zopo (Android 4.3) в браузере по умолчанию, все работает. Этот jsfiddle работает на вашем S3? P.S. Мой S3 не может обновиться до Android 4.3. - person Pinal; 09.01.2014
comment
Я попробовал еще раз, и он работает на Android 4.3 на моем S3, Safari на iPad 2, IE и Chrome на моем ПК. Вот он с другим (сценарным) шрифтом, чтобы было легче сказать, что он работает: jsfiddle.net/Rm56X. Однако это не работает в Firefox. Я изменил только текст «наслаждайтесь поездкой» на этом снимке экрана: browshot.com/screenshot/image/ 5649362?масштаб=1. Я продолжу расследование. - person David; 09.01.2014
comment
В Firefox проблема в Content-type, но FF поддерживает CSS-шрифты base64, поэтому я преобразовал ваш файл ttf в синтаксис base64, и он работает в FF. - person Pinal; 09.01.2014
comment
Спасибо, jsfiddle работает в Android Internet так же, как и в других моих браузерах. Мне удалось заставить кодировку base64 работать в Chrome+FF+IE+Safari на моем ПК и в Chrome+FF на моем телефоне, но Android Internet снова не работает. Казалось, что раньше у нас было решение для Android Internet и решение для других браузеров. Должен ли я реорганизовать свой CSS в 2 отдельных файла шрифтов (один для мобильных устройств, другой для других браузеров... определяется медиа-запросом? Я не уверен) и существующий custom.css? Это лучший способ решить эту проблему, учитывая ограничения, с которыми мне нужно работать? - person David; 10.01.2014
comment
Можете ли вы обнаружить Android на стороне сервера? - person Pinal; 10.01.2014
comment
Я предполагаю, что мы не можем. Ответ Beauceron работает как для Android Internet, так и для Firefox (настольная версия). Это также полностью CSS-решение, которое легче согласовать с моим клиентом. Знаете ли вы, как добавить или изменить это и заставить работать Firefox для Android? (Если нет, то меня это беспокоит меньше; похоже, в настоящее время его доля на рынке намного меньше, чем у Android Internet, поэтому большинство пользователей на момент написания этой статьи не увидят эту ошибку.) - person David; 11.01.2014

У меня была похожая проблема раньше, и я решил ее, добавив font-weight: normal !important; к элементам/тексту, в котором использовался шрифт. Я считаю, что проблема заключалась в том, что вес шрифта наследовался элементами, и это приводило к сбою шрифта. Надеюсь, что это работает :)

Итак, в вашем коде:

h2 {
    font-family: 'OpenSansSemibold', Arial, sans-serif;
    font-weight: normal !important;
    /* ... */
}
person tnt-rox    schedule 06.01.2014
comment
Это не сработало для меня на моем устройстве Android 4.3. Можете ли вы опубликовать ссылку на образец веб-страницы, которая работает с этим исправлением? - person David; 06.01.2014
comment
@David Просто убедитесь, что ваш шрифт TTF не поврежден. Некоторые из онлайн-конвертеров шрифтов уничтожают шрифты в процессе преобразования. - person tnt-rox; 07.01.2014
comment
eot = IE9, eot?#iefix = IE6-IE8, woff = FF/Chrome, ttf = safari/android/ios, svg = устаревшая ios или при сбое ttf - person tnt-rox; 07.01.2014
comment
Я могу просматривать символы шрифтов TTF в проводнике Windows, когда открываю их. Это единственное, что мне нужно было проверить? - person David; 07.01.2014

Вы также можете использовать решение Beacouron для медиа-запроса, ориентированного на мобильные устройства, но это может быть сложно, если у вас есть различные разрешения планшетов Android для таргетинга.

Еще одна идея, возможно, использовать медиа-запрос, ориентированный на браузеры webkit, например:

@media screen and (-webkit-min-device-pixel-ratio:0) {
    @font-face {
        font-family: 'open_sansbold';
        src: url('OpenSans-Bold-webfont.svg#open_sansbold') format('svg');
        font-weight: normal;
        font-style: normal;
    }
}
person Mathew Porter    schedule 23.05.2014

С 2017 года можно использовать запрос @import, предоставленный fonts.google.com, для шрифта, который вам нравится. Просто найдите нужный шрифт (шрифты), выберите его, затем на свернутой панели в нижней части экрана вам нужно будет выбрать @import в разделе «встроить». Я приложил скриншот для справки: https://gyazo.com/f959b6ef973d4b0df467a7a336cc3698

У меня была такая же проблема в браузере мобильного телефона по умолчанию, но после того, как я использовал этот синтаксис, проблема была решена. Не знаю почему, но это сработало.

person Irina    schedule 23.06.2017