Подтвердить что ты не робот

CSS Font Face "? #iefix"

У меня есть вопрос о css @font-face. Я использую следующий код с этого сайта (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).

@font-face {
font-family: 'MyFontFamily';
src: url('myfont-webfont.eot?#iefix') format('embedded-opentype'), 
     url('myfont-webfont.woff') format('woff'), 
     url('myfont-webfont.ttf')  format('truetype'),
     url('myfont-webfont.svg#svgFontName') format('svg');
}

Почему строка "url('myfont-webfont.eot?#iefix')" имеет "#iefix" в конце?

4b9b3361

Ответ 1

Это из-за того, как IE8 и ниже интерпретируют объявления шрифтов. Обычный url('myfont-webfont.eot') приведет к 404 ошибкам сервера в этих версиях IE; добавление ?#iefix устраняет проблемы с сервером. (Это по той же причине есть условные таблицы стилей для IE.)

Согласно Fontspring (прямо из источника):

Internet Explorer < 9 имеет ошибку в синтаксическом анализаторе для атрибута src. Если в src включено более одного формата шрифта, IE не загружает его и сообщает об ошибке 404. Причина в том, что IE пытается загрузить как файл все между открывающей скобкой вплоть до самой последней закрывающей круглой скобки. Чтобы справиться с этим неправильным поведением, вы просто сначала объявляете EOT и добавляете один знак вопроса. Вопросительный знак fools IE в мышлении остальной строки является строкой запроса и загружает только файл EOT. Другие браузеры следуют спецификации и выбирают нужный формат на основе каскада src и подсказки формата.

Таким образом, необходимой частью является ?; Я полагаю, что #iefix - это просто семантическая линия для программистов, которая не интерпретируется браузером каким-либо определенным образом.

Вот еще одна информация, если вы хотите: https://github.com/stubbornella/csslint/wiki/Bulletproof-font-face.