Как добавить какой-нибудь нестандартный шрифт на сайт? - PullRequest
485 голосов
/ 20 сентября 2008

Есть ли способ добавить какой-нибудь пользовательский шрифт на сайт без использования изображений, Flash или другой графики?

Например, я работал на каком-то свадебном веб-сайте и нашел много хороших шрифтов для этой темы, но я не могу найти правильный способ добавить этот шрифт на сервер, и как мне его включить шрифт с CSS в HTML? Можно ли обойтись без графики?

Ответы [ 21 ]

473 голосов
/ 20 сентября 2008

Это можно сделать с помощью CSS:

<style type="text/css">
@font-face {
    font-family: "My Custom Font";
    src: url(http://www.example.org/mycustomfont.ttf) format("truetype");
}
p.customfont { 
    font-family: "My Custom Font", Verdana, Tahoma;
}
</style>
<p class="customfont">Hello world!</p>

Это поддерживается для всех обычных браузеров , если вы используете TrueType-Fonts (TTF) или формат открытого веб-шрифта (WOFF).

113 голосов
/ 28 июня 2010

Вы можете добавить некоторые шрифты через Google Web Fonts .

Технически шрифты размещаются в Google, и вы связываете их в заголовке HTML. Затем вы можете свободно использовать их в CSS с @font-face ( читать об этом ).

Например:

В разделе <head>:

 <link href=' http://fonts.googleapis.com/css?family=Droid+Sans' rel='stylesheet' type='text/css'>

Тогда в CSS:

h1 { font-family: 'Droid Sans', arial, serif; }

Решение кажется достаточно надежным (даже Smashing Magazine использует его для заголовка статьи. ). Однако в Каталог шрифтов Google .

не так много доступных шрифтов.
70 голосов
/ 30 марта 2014

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

Посмотрите на следующую таблицу:

enter image description here

Как видите, есть несколько форматов, о которых вам нужно знать, в основном из-за кросс-браузерной совместимости. Сценарий в мобильных устройствах не сильно отличается.

Решения:

1 - полная совместимость с браузером

Это метод с самой глубокой поддержкой из возможных:

@font-face {
  font-family: 'MyWebFont';
  src: url('webfont.eot'); /* IE9 Compat Modes */
  src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('webfont.woff') format('woff'), /* Modern Browsers */
       url('webfont.ttf')  format('truetype'), /* Safari, Android, iOS */
       url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
}

2 - Большая часть браузера

Вещи сильно смещаются в сторону WOFF , так что вы, вероятно, можете обойтись без:

@font-face {
  font-family: 'MyWebFont';
  src: url('myfont.woff') format('woff'), /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
       url('myfont.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */
}

3 - только самые последние браузеры

Или даже просто ВОФК.
Затем вы используете это так:

body {
  font-family: 'MyWebFont', Fallback, sans-serif;
}

Ссылки и дополнительные материалы:

Это в основном то, что вам нужно знать о реализации этой функции. Если вы хотите больше изучить эту тему, я рекомендую взглянуть на следующие ресурсы. Большая часть того, что я здесь положил, извлечена из следующего

16 голосов
/ 12 сентября 2012

Если под нестандартным шрифтом вы подразумеваете нестандартный шрифт стандартного формата, вот как я это делаю, и он работает для всех браузеров, которые я проверял до сих пор:

@font-face {
    font-family: TempestaSevenCondensed;
    src: url("../fonts/pf_tempesta_seven_condensed.eot") /* EOT file for IE */
}
@font-face {
    font-family: TempestaSevenCondensed;
    src: url("../fonts/pf_tempesta_seven_condensed.ttf") /* TTF file for CSS3 browsers */
}

так что вам просто понадобятся шрифты ttf и eot. Некоторые инструменты, доступные онлайн, могут сделать преобразование.

Но если вы хотите прикрепить шрифт в нестандартном формате (растровые изображения и т. Д.), Я не могу вам помочь.

11 голосов
/ 20 сентября 2008

Я обнаружил, что самый простой способ разместить на сайте нестандартные шрифты - это использовать sIFR

Он включает в себя использование объекта Flash, который содержит шрифт, но он легко ухудшает стандартный текст / шрифт, если Flash не установлен.

Стиль установлен в вашем CSS, а JavaScript устанавливает замену Flash для вашего текста.

Редактировать: (Я все еще рекомендую использовать изображения для нестандартных шрифтов, поскольку sIFR увеличивает время проекта и может потребовать обслуживания).

10 голосов
/ 11 мая 2009

Typeface.js и Cufon - два других интересных варианта. Это компоненты JavaScript, которые отображают данные специального шрифта в формате JSON (который вы можете конвертировать из форматов TrueType или OpenType на своих веб-сайтах) через новый элемент во всех новых браузерах кроме Internet Explorer и через VML в Internet Explorer.

Основная проблема с обоими (на данный момент) заключается в том, что выделение текста не работает или, по крайней мере, работает очень неловко.

Тем не менее, это очень приятно для заголовков. Основной текст ... я не знаю.

И это удивительно быстро.

10 голосов
/ 26 февраля 2009

Статья Font-face в IE: работа веб-шрифтов говорит, что он работает со всеми тремя основными браузерами.

Вот пример, который я получил: http://brendanjerwin.com/test_font.html

Дополнительное обсуждение в Встраивание шрифтов .

8 голосов
/ 20 сентября 2008

Или вы можете попробовать sIFR . Я знаю, что он использует Flash, но только при наличии. Если Flash недоступен, он отображает исходный текст в исходном шрифте (CSS).

5 голосов
/ 20 сентября 2008

Есть ли способ добавить какой-нибудь пользовательский шрифт на сайт без использования ... Flash?

Конечно, используйте Silverlight .

4 голосов
/ 20 сентября 2008

Если вы используете ASP.NET, очень просто генерировать шрифты на основе изображений без необходимости устанавливать (как при добавлении к установленной базе шрифтов) шрифты на сервер, используя:

PrivateFontCollection pfont = new PrivateFontCollection();
pfont.AddFontFile(filename);
FontFamily ff = pfont.Families[0];

и затем рисуем этим шрифтом на Graphics.

...