Кросс-браузерный @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

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

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
Применить не сложно а вот разобратся как работает.
Dimon
fnch, спасибо! Заработало с src:url('/путь/шрифт.svg#id_шрифта_в тексте_svgшки') format('svg').

'ё' и жирного шрифта нет. Текст немного сползает. Но это уже прорыв! Да здравствуют Великие Суровые Норвежские Разрабы!
#
Dimon
Dimon
? Экранирования временно.нет :)
#
Dimon
Web-esse
Font Face Generator использую давно, очень хороший сервис, на своем сайте именно через него подключала.
Верстальщик
Не злоупотребляйте шрифтами...
Эти слова, да вырезать у каждого дизайнера на лбу... задолбали своим Myriad Pro!
#
Верстальщик
Антон
Спасибо, сейчас будем пробовать, почему-то cufon для меня проще оказался, но у него один большой недостаток - текст не выделяется, просто рисуется картинка, а нужно что бы выделялся, вообщем будем разбиратся:)
dymasty
Блин, не получается подключить... причем раньше уже так делал... возможны ли глюки, в зависимости не от расширения шрифта. а от него самогО?
Anna
А я никогда не могу правильно и красиво настроить такие мелкие штучки и примочки
serj
спасибо за статью
#
serj
Андрей
Здравствуйте. Нашел в бесплатной теме Wordpress следующий код:

@font-face {
font-family: 'Genericons';
src: url(data:application/font-woff;charset=utf-8;base64,НАБОР СИМВОЛОВ) format('woff');
font-weight: normal;
font-style: normal;
}

Для чего он нужен? Утилита Xenu определяет этот url как битую ссылку.

Спасибо за ответ.
#
Андрей
Forskolin
круто информация. Я с нетерпением жду более

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

как выглядит какой тег
жирный текст <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>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler