Встроенные шрифты и внешний ресурс

Я решал проблемы с веб-шрифтами в различных браузерах и следовал рекомендациям FontSpring, который, похоже, является последним рекомендуемым решением.

Однако, поскольку я использую CDN и обслуживаю свои CSS-файлы из другого домена, я очень быстро обнаружил, что ни IE, ни Firefox не будут загружать веб-шрифты из CDN, выдавая такую ​​ошибку, как @font-face failed cross-origin request, В моем CSS у меня было что-то вроде следующего:

@font-face {
    font-family: 'ClarendonRoman';
    src: url('/assets/fonts/clarendon-bt-webfont.eot?#iefix') format('embedded-opentype'),
       url('/assets/fonts/clarendon-bt-webfont.woff') format('woff'),
       url('/assets/fonts/clarendon-bt-webfont.ttf')  format('truetype'),
       url('/assets/fonts/clarendon-bt-webfont.svg#svgFontName') format('svg');
    font-weight: normal;
    font-style: normal;
}

Как видите, пути к шрифтам относятся к CSS, и в результате шрифты не загружаются из CDN. То, что мне было нужно, это жесткий код в домене сайта в мои таблицы стилей, чтобы шрифты загружались из одного источника. Так что моя новая таблица стилей выглядит так:

@font-face {
    font-family: 'ClarendonRoman';
    src: url('//mydomain.com/assets/fonts/clarendon-bt-webfont.eot?#iefix') format('embedded-opentype'),
       url('//mydomain.com/assets/fonts/clarendon-bt-webfont.woff') format('woff'),
       url('//mydomain.com/assets/fonts/clarendon-bt-webfont.ttf')  format('truetype'),
       url('//mydomain.com/assets/fonts/clarendon-bt-webfont.svg#svgFontName') format('svg');
    font-weight: normal;
    font-style: normal;
}

А теперь со встроенным доменом все отлично работает для HTTPS и HTTP-трафика. Тем не менее, я не совсем счастлив, так как я больше не использую свой CDN для обслуживания файлов шрифтов, и я сторонник производительности. Поскольку я не могу обойти проблему с доменом кросс-происхождения, я подумываю о внедрении шрифтов. Если вы посмотрите на http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax, вы увидите, что они рекомендуют встроенный формат data-uri следующим образом:

@font-face {
  font-family: 'MyFontFamily';
  src: url('myfont-webfont.eot?') format('embedded-opentype');
  }

@font-face {
  font-family: 'MyFontFamily';
  url(data:font/truetype;charset=utf-8;base64,BASE64_ENCODED_DATA_HERE)  format('truetype'),
  url(data:font/woff;charset=utf-8;base64,BASE64_ENCODED_DATA_HERE)  format('woff'),
  url('myfont-webfont.svg#svgFontName') format('svg');    
}

У меня есть несколько вопросов по этому поводу:

  • Конечно, если я дважды внедряю шрифт в свою таблицу стилей, используя кодировку Base64 для форматов TTF и WOFF, я собираюсь раздуть свою таблицу стилей до такой степени, что, возможно, преимущество вложения сводится на нет удвоением или большим количеством данных в моей таблице стилей?
  • Почему в этом примере src: не используется перед каждым URL (data:...). Это опечатка или умышленное?
  • Если я встраиваю шрифты, будут ли все браузеры использовать встроенную версию поверх EOT-версии и, таким образом, сохранить сервер в оба конца? Какие браузеры будут использовать встроенные файлы TTF или WOFF?
  • Почему мы не внедряем версию EOT?

Я ценю, что в этом посте немало информации, но я надеюсь, что этот пост окажется полезным для тех, кто сталкивается с той же дилеммой.

Matt

0 ответов

Другие вопросы по тегам