Кросс-браузерный @font-face

Кросс-браузерный @font-face

Всем привет!

Сейчас все больше разработчиков начинают внедрять собственные шрифты в дизайн сайтов. Весной я написал статью о том, как с помощью различных библиотек (JS, Flash) можно использовать сторонние шрифты на сайтах.

Сегодня же я хочу рассказать о свойстве CSS @font-face, с помощью которого легче и удобнее всего использовать произвольный шрифт на сайте. Но есть одно «но», которое предстоит решить — разные браузеры требуют разные форматы шрифтовых файлов.

Введение

По данным статистики на данный момент минимум 92% десктопных браузеров правильно работают с @font-face. Делается все просто: называем шрифт, указывает путь до него, используем его прямо в CSS:

// Объявляем шрифт
@font-face {
font-family: 'Имя шрифта';
src: url('путь/до/него');
}

// Применяем шрифт
p {
font-family: 'Имя шрифта', Arial;
}

Здесь в src: url указывается путь до файла со шрифтом, в src: local — название шрифта на локальной машине на тот случай, если у юзера этот шрифт уже есть. Но, не все так просто, разным браузерам нужны разные форматы шрифтов.

Форматы шрифтов

Шрифты могут быть в форматах TTF, OTF, EOT, SVG и WOFF:

  • Internet Explorer (все версии) — EOT;
  • Firefox (начиная с 3.5) — TTF/OTF (WOFF добавлен с версии 3.6);
  • Opera (начиная с 10) — TTF/OTF;
  • Chrome (все версии) — SVG (TTF/OTF добавлены в конце января 2010-го);
  • Safari (начиная с 3.2) — TTF/OTF.

Как видим, у нас есть минимум четыре типа файлов, которые нужно подгружать.

Правильное использование

Для того, чтобы каждый раз не тратить кучу времени на создание нескольких шрифтовых файлов и разного синтаксиса подключения, хорошие люди сделали сервис — Шрифтовая белка. Заходим, загружаем шрифт, получаем архив с примером использования и необходимыми типами файлов.

Теперь можно проверить, что все везде работает как надо. Предлагаю ради интереса посмотреть на то, как же выглядит кросс-браузерный @font-face:

@font-face {
font-family: 'TheanoDidotRegular';
src: url('theanodidot-regular-webfont.eot');
src: local('☺'),
url('theanodidot-regular-webfont.woff') format('woff'),
url('theanodidot-regular-webfont.ttf') format('truetype'),
url('theanodidot-regular-webfont.svg#webfontE40g3tc3') format('svg');
font-weight: normal;
font-style: normal;
}

На этом все. Не злоупотребляйте различными шрифтами ;-)

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 53

spike
> Не злоупотребляйте...

Я даже больше скажу, буржуйские спецы говорят, что 2 разных шрифта на странице — более чем достаточно.
#
spike  
Тёма
"Шрифтовая белка" игнорирует кириллицу... Или все же можно как-то ее заставить?
#
Тёма
Тёма
Нашел, извините :)
#
Тёма
Alex
Спасибо. Есть какие-то подводные камни использования font-face в сравнении с cufon? чем луше пользоваться? :)
nikonor
А нельзя ли указать еще ссылки на сервисы или софт, которые могут шрифты конвертировать
#
nikonor
Владимир котельников
Про Шрифтовую белку узнал давно. Но как не пытался, так и не смог придумать применение сей фичи...
Denai
WOFF разве только огнелис понимает? вроде либо гуглохром либо опера ж научились их тоже юзать, не?
Vavgust
А вот как ttf в otf конвертировать? Белка такого не делает.
#
Vavgust
Сергей
local(`смайлик`) - тут я как понимаю можно любой символ использовать в кавычках?
#
Сергей
ZEEN
В Опере всегда проблемы. Или русский язык глючит или вовсе ничего не работает
#
ZEEN
Чистяков Денис
@Alex
Это принципиально другой подход сифон и другие JS / флеш вставщики это костыли, а это решение предлагаемое браузерами и W3C. На текущий момент, как было сказано правильно, его поддерживают ВСЕ современные браузеры, и даже многие устаревшие, IE поддерживает EOT'ы начиная с 4-ой версии.
Из плюсов нет проблемы с выделением / копированием, и нет дополнительной нагрузки на клиенте, кроме загрузки нужного для браузера шрифтового файла, но это один раз, дальше из кеша.
@ZEEN
По поводу глюков с русским все просто, по умолчанию "белка" откидывает все кроме латинских букв, надо переходить в экспертные настройки и либо выбирать "Custom Subsetting..." и нужные шрифтовые группы, либо оставлять без "обрезания" и выбирать "No Subsetting", эти настройки делаются в группе: "Subsetting". Сам сначала не могу понять в чем проблема.
По поводу примера с "TheanoDidotRegular" выложили бы куда-нить, что бы не искать / качать самим)
#
Чистяков Денис
Shustry
Увы, продолжаю пользовацо "сифоном" ибо Опера с фонт-фэйс работает чуть лучше чем никак.
#
Shustry
Allods Online
Работает опера нормально с ним (во всяком случае свежие версии)
У меня на сайте например шрифт моднявый именно так прилеплен
Чистяков Денис
@Shustry
Присоединяюсь к Allods Online в опере работает с 10-ки это уже более чем, при том что любая открытая более младшая версия просится очень настойчиво обновится и сайт оперы намекает )
На в крайнем случае если так требуется поддержка в более уставших браузерах, то для них через хаки / jQuery определение браузера и версии подключать сифон ;)
Больше всего меня приятно удивил IE который конечно использует только свой проприетарный формат, но хотя бы может и умеет и уже давно )
#
Чистяков Денис
Саша Кириллов
@Vavgust
Чтобы сконвертировать ttf в otf, нужно воспользоваться сервисом http://onlinefontconverter.com/

Нажать skip login, а там уж разберетесь.
mamasha
Весной я написать статью
#
mamasha
Сергей
Не работает отписка от комментариев.
#
Сергей
Алекс
Ну правильно нужно смотреть какой браузер.
nikonor
подтверждаю. не работает отписка
#
nikonor
Fruzenshtein
РЕСПЕКТ! Хорошая статья, давно меня мурыжат заказчики такой мулькой, как СВОЙ ШРИФТ на сайте.
#
Fruzenshtein  
shevgeny
С дебютом, конечно, поздравляю, но... об этих редакторах в сети столько написано, что Ваша статья - не новость. А вот первому комментатору, действительно, спасибо!
Алксандр
Админы. Вы ушли в отпуск, редко статьи стали выпускать. А сайтец-то интересный, хотелось бы чаще на него заходить. Спасибо.
Юра
Доброго времени суток всем.
Люди кто знает, как на мозилле можно свой шрифт поставить?
Максим
Я думаю использование разных шрифтов не очень хорошая идея IE 6 вообще тупит...
Юлия
Огромное спасибо! Самая полезная статья из всех, что мне доводилось читать о внедрении веб-шрифтов.
Jungle
А реально ли использовать шрифты, которых нет у потенциального посетителя сайта?
Allods Online
Так о них же и речь
Юра
Не работает отписка от комментариев.
Олег
Все отлично работает во ВСЕХ браузерах.
Только есть одна единственная проблема в виндоусе(в линуксе не смотрел, так как не держу такого добра)(в маке как всегда все великолепно): если не настроен ClearType шрифт отображается без сглаживания. А это серьезный недочет. Но все равно смотрю в сторону @font-face. ООоочень удобно, и главное - нативно!
В случае, если надпись очень видная и ответственная, можно использовать Кюфон, если нет, и отсутствие сглаживаения(не во всех случаях) не критично, можно смело лепить @font-face.
Junglers
Тупанул немного, не так вопрос задал, хотя уже отпала необходимость в ответе:))
Ajpro
Ребят, только что протестировал. Во всех браузерах работает, даже в ИЕ6, но в последней Опере не хочет работать один пример: ни пример в статье, ни демо-версия с белки, ни сайт http://allodov.net/, автор которого утверждает, что все работает.
Версия оперы: 10.61
#
Ajpro
Ajpro
Возможно дело в версии Windows, у меня 7-ка.
#
Ajpro
FatJoe
У меня работает.
Налим
Все хорошо, но многие еще ie6 пользуюутся, для всех браузеров напряжно нормальное отображение делать, да и время занимает.
Евгений
Я использую такую форму

 /* только для Internet Explorer */

@font-face {
	font-family: 'CenturyGothicRegular';
	src: url('fonts/gothic-webfont.eot');

	}
	 
	/* далее для всех остальных браузеров */
	 @font-face {
	  font-family: "Century Gothic";
	  src: local("Century Gothic"),
	       url(fonts/GOTHIC.TTF);
	}
	em {
	    font-family: CenturyGothicRegular, "Century Gothic", arial;
	    font-weight: normal;
	}


А конвектор на этом сайтике есть http://www.fontsquirrel.com/fontface/generator только в настройках поставьте галочку на Cyrillic
#
Евгений
uainfo
что делать если в разных браузерах текс представляется по разному ?
Антон
В Опере 10.61 не работают примеры :(
Остальные браузеры отображают замечательно
#
Антон
inst
Ещё в статье не хватает информации о гугл фонт директори.

Правда там всего несколько шрифтов и как я понял они только на латинице.
#
inst  
Даник
В опере (10.62) не маслает совсем. Пересмотрел кучу тестов и примеров - красивей arial'а ничего не увидел (((
Думыл это мне попался эгземпляр такой, но нет, педиорически появляются месаги, однозначно указвающие на косяк девелОПЕРов. Ынтересно былоб узнать процент "паленых" опер, не хавающих @font-face. Че примечательно - локально, открывая файл - все красиво. Пытаешся открыть с сервера - вся красота пропадает кудыто...
#
Даник
Даник
Стопэ, стопэ!!! Усе работает, нужно только вырубить из розетки режим турбо. И как я раньше не допер...блин, столько постов своим тупым каментом заср*л. Пойду ка вытащю гвоздь из головы, он там не месту похоже...
#
Даник
zaycker
Вообщем, резюме.
Сам интересовался этой темой давно. Метод работает НЕ ВО ВСЕХ браузерах. Проблема одна - Опера 9.х на win платформе. Выделилась. По ли.ру это в районе 2-х процентов клиентов на топовых ресурсах. При этом оперщики - люди инерционные, по статистике, почему-то обновляются редко. Но и их не хочется терять.
Смело можно использовать svgz - экономия трафика в 2 раза. Из используемых мной на странице шрифтов - eot, otf и svgz. Для всех хватает за глаза.
Опера 10 при релоаде страницы сбрасывает шрифт. Если закрыть и снова открыть страницу - работает. Пока не знаю, почему - говорили, режим турбо виноват, но как? При кешировании что-то?

Пока борюсь с оперой 9. В ней шрифты svg работают при условии расположения контента внутри самого svg. Пример тут: http://dev.opera.com/articles/view/playing-svg-darts-target-practice/
Подозреваю, что решение таки опять через js - опознать браузер, вынуть-вставить контент в svg. Только стили потеряем, по букве что ль переводить, пока не придумал. Либо вариант xsl, как кому...
#
zaycker  
Даник
И снова я. И на этот раз с серьезной проблемой....
Вобщем эксперименты показали, что Опера ужасно лагает с @font-face.
Вот некоторые глюки:
Если font-face Объявлен во внешнем файле, а стиль типа p{font-family: 'MyFont'} в в самом html - работать не будет.
ttf и работают только по протоколу file://, причем в пути не должно быть пробелов и кириллицы. С сервака не отображается. Более того, из-за этого косяка нужно url(svg) указывать раньше чем url(ttf).
Вобщем то это не былоб проблемой, еслиб не тот факт что в опере глючно отображаются некоторые svg-шрифты - обрезаются буквы и слова. С ttf такой проблемы нет. Но ОН НЕ ГРУЗИТСЯ С СЕРВЕРА! верней грузится но не отображается. http-заголовок передаю - font/ttf - не помогает.. вобщем опера засранка подвела блин...
#
Даник
Александр
Сегодня начал изучать РНР... капец...нудно и ничего не понятно =((( но думаю взяться сильно за него, такчто твои советы пригодятся думаю)) спасибО!
fnch
Баг в Opera лечится подключением формата svg перед truetype.
Гость999
В опере работает только svg адекватно который с конвертировать не чем =(
#
Гость999
set
fnch, спасибо тебе, добрый человек :) всё заработало :)
#
set
Allpa
Недавно заинтересовалась возможностями @font-face, вот, экспериментирую..
Одна проблема: не могу поймать букву "ё". Ни большую, ни маленькую.

Дело в том, что я очищаю шрифт от ненужных языков и символов, облегчения для. Несколько раз проделывала эту операцию, оставляя все "ё" и "Ё", какие встречала (подозревая, однако, что они могут относиться не к кириллице). Сохраняю шрифт, конвертирую в нужные форматы с помощью сервиса _http://www.fontsquirrel.com/fontface/generator, закидываю в блог, — все буквы видны, а "ё" — нет.

Благодаря этой Вашей статье справилась с проблемой не отображения кириллицы вообще.
Теперь кириллица отображается прекрасно.
Кроме злополучной "ё", хотя она в кириллическом начертании шрифта присутствует, — я уже вся в отчаянии.. *_*
Вдруг подумала: возможно, Вы сможете подсказать, как справиться с проблемой.. а?
Спасибо!
Allpa
Хмм.. Почитала про Оперу, проверила на ней. Шрифт мигнул, но подключился. А "ё" исчезла вовсе! о.О
Одиночка Айс
>А конвектор на этом сайтике есть http://www.fontsquirrel.com/fontface/generator только в настройках поставьте галочку на Cyrillic

Видать до лета 2011 года эта галка не дожила (((((
Андрей
Спасибо, буду пробовать использовать.
#
Андрей
Winstyle
Применить не сложно а вот разобратся как работает.

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku