Я занимался проблемами веб-шрифтов в различных браузерах и следовал рекомендациям 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-версию?
Я ценю, что в этом посте немало, но я надеюсь, что этот пост окажется полезным для тех, кто сталкивается с той же дилеммой.
Мэтт