CSS @font-face не работает с Firefox, но работает с Chrome и IE

следующий код работает в Google Chrome beta, а также IE 7. Тем не менее, Firefox, похоже, имеет проблемы с этим. Я подозреваю, что это проблема того, как включены мои CSS-файлы, потому что я знаю, что Firefox не слишком дружелюбен к междоменному импорту.

но это все просто статический HTML, и нет вопроса о междоменном.

на моей целевой странице.html я делаю импорт CSS так:

<link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, projection" />

в главном.css у меня есть другой импорт, как Итак:

@import url("reset.css");
@import url("style.css");
@import url("type.css");

и внутри типа.css у меня есть следующие объявления:

@font-face {
    font-family: "DroidSerif Regular";
        src: url("font/droidserif-regular-webfont.eot");
        src: local("DroidSerif Regular"), 
                url("font/droidserif-regular-webfont.woff") format("woff"), 
                url("font/droidserif-regular-webfont.ttf")     format("truetype"), 
                url("font/droidserif-regular-webfont.svg#webfontpB9xBi8Q")     format("svg"); 
    font-weight: normal; font-style: normal; }
@font-face {
    font-family: "DroidSerif Bold";
    src: url("font/droidserif-bold-webfont.eot");
    src: local("DroidSerif Bold"), 
        url("font/droidserif-bold-webfont.woff") format("woff"), 
        url("font/droidserif-bold-webfont.ttf") format("truetype"), 
        url("font/droidserif-bold-webfont.svg#webfontpB9xBi8Q") format("svg");
    font-weight: normal; font-style: normal; }

body { font-family: "DroidSerif Regular", serif; }
h1 { font-weight: bold; font-family: "DroidSerif Bold", serif; }

у меня есть каталог под названием "шрифт" в том же месте, что и тип.стиль CSS. Этот каталог шрифтов содержит все файлы woff/ttf / svg и т. д.

Я в тупике на этом. он работает в Chrome и IE, но не на Firefox. Как это возможно? Что я упускаю?

28 ответов


ЛОКАЛЬНЫЙ ЗАПУСК САЙТА (file:///)

Firefox поставляется с очень строгим "файл uri origin" (file:///) политика по умолчанию: чтобы она вела себя так же, как и другие браузеры, перейдите в about:config, фильтр fileuri и включите следующий параметр:

security.fileuri.strict_origin_policy

установить false и вы должны иметь возможность загружать локальные ресурсы шрифтов на разных уровнях пути.

ОПУБЛИКОВАННЫЙ САЙТ

согласно моему комментарию ниже, и вы испытываете эту проблему после развертывания вашего сайта, вы можете попытаться добавить дополнительный заголовок, чтобы увидеть, настраивается ли ваша проблема как проблема с кросс-доменом: это не должно, так как вы указываете относительные пути, но я бы все равно попробовал: в вашем .файл htaccess, укажите, что вы хотите отправить дополнительный заголовок для каждого .ТЦФ./otf/.запрашиваемый файл eot:

<FilesMatch "\.(ttf|otf|eot)$">
    <IfModule mod_headers.c>
        Header set Access-Control-Allow-Origin "*"
    </IfModule>
</FilesMatch>

честно говоря, я бы не ожидал, что это будет иметь какое-либо значение, но это так просто, что стоит попробовать: иначе попробуйте использовать кодировка base64 для вашего шрифта шрифта, уродливый, но он может работать тоже.

хорошее резюме доступно здесь


В дополнение к добавлению следующего к вашему .откройте файл. htaccess: (спасибо @Мануэль)

<FilesMatch "\.(ttf|otf|eot)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

вы можете попробовать явно добавить типы MIME webfont в.файл htaccess... вот так:

AddType font/ttf .ttf
AddType font/eot .eot
AddType font/otf .otf
AddType font/woff .woff

В конце концов, мой .htaccess файл выглядит так (для раздела, который позволяет webfonts работать во всех браузерах)

# BEGIN REQUIRED FOR WEBFONTS

AddType font/ttf .ttf
AddType font/eot .eot
AddType font/otf .otf
AddType font/woff .woff

<FilesMatch "\.(ttf|otf|eot|woff)$">
    <IfModule mod_headers.c>
        Header set Access-Control-Allow-Origin "*"
    </IfModule>
</FilesMatch>

# END REQUIRED FOR WEBFONTS

У меня тоже была эта проблема. Я нашел ответ здесь: http://www.dynamicdrive.com/forums/showthread.php?t=63628

Это пример решения, которое работает на firefox, вам нужно добавить эту строку в свой шрифт face css:

src: local(font name), url("font_name.ttf");

у меня была точно такая же проблема. Мне пришлось создать новую папку под названием "шрифты" и поместить ее в wp_content. Я могу получить доступ к нему из моего браузера, как это http://www.example.com/wp-content/fonts/CANDY.otf

ранее папка шрифтов находилась в том же каталоге, что и мой CSS-файл, а @font-face выглядел так:

@font-face { 
    font-family: CANDY;
    src: url("fonts/CANDY.otf");
}

Как я уже упоминал выше, это не работало в Firefox, а только с Chrome. Теперь он работает потому что я использовал абсолютный путь:

@font-face { 
    font-family: CANDY;
    src: url("http://www.example.com/wp-content/fonts/CANDY.otf");
}

Я просто оставлю это здесь, потому что мой сотрудник нашел решение для связанной проблемы "шрифт-лицо не работает на firefox, но везде".

проблема заключалась в том, что Firefox испортил объявление семейства шрифтов, это закончилось его исправлением:

body{ font-family:"MyFont" !important; }

PS: Я также использовал html5boilerplate.


Я бы упомянул, что некоторые шрифты имеют проблемы в firefox, если их имя файла содержит определенные символы. Недавно я столкнулся с проблемой с шрифтом "Modulus", у которого было имя файла "237D7B_0_0". Удаление подчеркиваний в имени файла и обновление css в соответствии с новым именем файла решили эту проблему. Другие шрифты с похожими символами не имеют этой проблемы, что очень любопытно...вероятно, ошибка в firefox. Я бы рекомендовал сохранить имена файлов только для буквенно-цифровых символов.


У меня была та же проблема. Дважды проверьте свой код на H1, H2 или любой другой стиль, на который вы ориентируетесь с помощью правила @font-face. Я обнаружил, что мне не хватает комы после font-family: 'custom-font-family' Arial, Helvetica etc Он отлично отображался в каждом браузере, кроме Firefox. Я добавил кому, и это сработало.


для этого шрифта, в частности, вы должны использовать Google Font API:

http://code.google.com/webfonts/family?family=Droid+Sans

Если вы все еще хотите использовать генератор набора FontSquirrel, используйте опцию Smiley hack для устранения локальных проблем шрифта. После того, как вы сгенерировали комплект, проверьте, что сгенерированная демонстрация.html работает в FireFox. Я уверен в этом. Теперь загрузите его на свой сервер-бьюсь об заклад, он там тоже работает, так как FontSquirrel потрясающий.

однако, если вы сломали сгенерированный код набора при интеграции его в свой проект, используйте стандартные методы отладки -- проверьте 404 и идите строка за строкой, пока не найдете проблему. WOFF определенно должен работать в FF, так что это хорошее место для начала.

наконец, если ничего из этого не работает, обновите Firefox. Я написал все это, предполагая, что вы используете последнюю версию; но вы не указали, какую версию вы проверяете, так что это может быть вашей проблемой тоже.


попробуйте nerfing объявление локального источника в вашем @font-face директивы.

в Firefox или Google Font API есть известная ошибка, которая предотвращает использование вариантов шрифтов, если шрифт установлен локально, и соответствует определенному локальному имени:

http://code.google.com/p/googlefontdirectory/issues/detail?id=13

чтобы эффективно nerf локальное объявление, просто сделайте свою локальную исходную строку какой-то ерундой. Большей частью принятое соглашение для этого-использовать символ Юникода смайлика ("☺"). Почему? У пола Айриша есть отличное объяснение в своем блоге:

http://paulirish.com/2010/font-face-gotchas/#smiley


У меня была именно эта проблема с запуском ff4 на mac. У меня был локальный сервер разработки, и моя декларация @font-face работала нормально. Я мигрировал в live, и FF "мигал" правильный тип при загрузке первой страницы, но при навигации глубже шрифт по умолчанию использовался в таблице стилей браузера.

Я нашел решение в добавлении следующего объявления .реврайт

<FilesMatch "\.(ttf|otf|eot)$">
    <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    </IfModule>
</FilesMatch>

нашел via


одно простое решение, о котором еще никто не упоминал, - это встраивание шрифта непосредственно в файл css с помощью кодировки base64.

Если вы используете fontsquirrel.com, в генераторе набора шрифтов выберите режим эксперта прокрутите вниз и выберите Кодировка Base64 под параметры CSS - загруженный набор шрифтов будет готов к подключению и воспроизведению.

Это также имеет преимущество сокращения времени загрузки страницы, потому что он требует меньше запрос http.


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

в противном случае, это, вероятно, поможет указать на URL-адрес, где возникает проблема.

кроме того, я бы предложил посмотреть на консоль ошибок Firefox, чтобы узнать, сообщаются ли какие-либо синтаксические ошибки CSS или другие ошибки.

кроме того, я бы отметил вероятно,вы хотите шрифт-вес: полужирный во втором правиле @font-face.


использование an .htaccess Access Control Allow Origin rule не работал для меня, когда я столкнулся с этой проблемой.

вместо этого в IIS в интернете.config вставьте систему.блок веб-сервера, показанный ниже.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="*" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

это работает как шарм для меня. Если необходимо ограничить доступ к определенному домену, замените * на домен.


У меня была такая же проблема с получением шрифт для правильного отображения в Firefox. Вот что я нашел, чтобы работать на меня. Добавьте косую черту перед каталогом, содержащим шрифт в атрибуте url. Вот мои до и после версии:

B E F O R E:
   @font-face
{   font-family: "GrilledCheese BTN";
    src: url(fonts/grilcb__.ttf);
}

A F T E R:
@font-face
{   font-family: "GrilledCheese BTN";
    src: url(/fonts/grilcb__.ttf);
}

обратите внимание на ведущую косую черту перед "шрифтами" в url-адресе? Это говорит браузеру начать с корневого каталога, а затем получить доступ к ресурсу. По крайней мере для меня - проблема решена.


можете ли вы проверить с firebug, если вы получите 404? У меня были проблемы с проходом, и я обнаружил, что расширение было таким же, но файл linux.ttf отличается от файла.ТЦФ... и он работал со всеми браузерами, кроме firefox.

желаю, чтобы это помогло!


это проблема с тем, как вы настройка шрифта по пути. Поскольку вы не начали путь с"/", Firefox попытается найти шрифт на основе пути, в котором находится таблица стилей. Таким образом, Firefox ищет ваш шрифт в каталоге "root/css/font" вместо каталога "root/font". Вы можете легко исправить это, переместив папку шрифтов в папку css или добавив a / в начало ваших путей шрифта.

попробуйте это:

@font-face {
    font-family: "DroidSerif Regular";
    src: url("/font/droidserif-regular-webfont.eot");
    src: local("DroidSerif Regular"), url("/font/droidserif-regular-webfont.woff") format("woff"), url("/font/droidserif-regular-webfont.ttf") format("truetype"), url("/font/droidserif-regular-webfont.svg#webfontpB9xBi8Q") format("svg");
    font-weight: normal;
    font-style: normal;
}
@font-face {
    font-family: "DroidSerif Bold";
    src: url("/font/droidserif-bold-webfont.eot");
    src: local("DroidSerif Bold"), url("/font/droidserif-bold-webfont.woff") format("woff"), url("/font/droidserif-bold-webfont.ttf") format("truetype"), url("/font/droidserif-bold-webfont.svg#webfontpB9xBi8Q") format("svg");
    font-weight: normal;
    font-style: normal;
}


body {
    font-family: "DroidSerif Regular" , serif;
}
h1 {
    font-weight: bold;
    font-family: "DroidSerif Bold";
}


У меня была похожая проблема. Демо-страница fontsquirel работала в FF, но не на моей собственной странице, хотя все файлы поступали из одного домена!

оказалось, что я связываю свою таблицу стилей с абсолютным URL (http://example.com/style.css) поэтому FF думал, что он исходит из другого домена. Изменение ссылки таблицы стилей href на / style.css вместо этого исправил для меня.


возможно, ваша проблема-проблема именования, особенно в отношении использования (или нет) пробелов и дефисов.

у меня была проблема similair, которую я думал, что исправил, разместив необязательный элемент кавычки ( ' ) вокруг font-/family-names, но это фактически неявно исправило проблему именования.

Я не совсем в курсе спецификации CSS, и есть (по крайней мере, для меня) некоторая двусмысленность в том, как разные клиенты интерпретируют спецификации. Кроме того, это также кажется связанным с соглашениями об именах PostScript, но, пожалуйста, исправьте меня, если я ошибаюсь!

В любом случае, как я понимаю сейчас, ваша декларация использует смесь двух возможных различных ароматов.

@font-face {
  font-family: "DroidSerif Regular";

Если ты дроид фактическая фамилия, из которых Sans и засечками являются членами, как, например, их детей Без Регулярного или Засечек Bold, тогда вы либо используете пробелы everyhere для объединения идентификаторов, либо удаляете пробелы и используете CamelCasing для familyName, а дефисы для суб-идентификаторов.

применительно к вашей декларации, это будет выглядеть примерно так:

@font-face {
  font-family: "Droid Serif Regular";

или

@font-face {
  font-family: DroidSerif-Regular;

Я думаю, что оба должны быть совершенно законными, либо с цитатами, либо без них, но у меня был смешанный успех с этим между различными клиентами. Может быть, однажды у меня будет время, чтобы разобраться в деталях. это / эти isseu/s.

Я нашел эту статью полезной для понимания некоторых аспектов: http://mathiasbynens.be/notes/unquoted-font-family

эта статья содержит более подробную информацию о PostScript, а также некоторые ссылки на спецификацию Adobe PDF: http://rachaelmoore.name/posts/design/css/find-font-name-css-family-stack/


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

этой

body {font-family: "DroidSerif Regular", serif; }

становится

body {font-family: DroidSerifRegular, serif; }

в моем случае я sloved проблема с вставкой кода стиля шрифта

<style type="text/css">
@font-face { 
font-family: 'Amazone';font-style: normal; 
/*font-weight:100; -webkit-font-smoothing: antialiased; font-smooth:always;*/ 
src: local('Amazone'), url(font/Amazone.woff) format('woff');} 
</style>

direclty в заголовке вашего индекса.html или php страница, в теге style. Работает на меня!


из-за этого это один из лучших результатов Google для этой проблемы, я хотел бы добавить, что решило эту проблему для меня:

Мне пришлось удалить формат (opentype) из src шрифта, тогда он работал и в Firefox. До этого он отлично работал в Chrome и Safari.


может быть, это не из-за вашего кода, это из-за вашей конфигурации Firefox.

почем Tool bar Западный to Unicode

View > Text Encoding > Unicode

Если вы пытаетесь импортировать внешние шрифты, вы сталкиваетесь с одной из наиболее распространенных проблем с Firefox и другим браузером. Некоторое время ваш шрифт хорошо работает в google Chrome или одном из других браузеров, но не в каждом браузере.

есть много причин для этого типа ошибки одна из самых больших причин этой проблемы-предыдущий определенный шрифт. Вам нужно добавить !важное ключевое слово после окончания каждой строки кода CSS как ниже:

пример:

@font-face
{
    font-family:"Hacen Saudi Arabia" !important;
    src:url("../font/Hacen_Saudi_Arabia.eot?") format("eot") !important;
    src:url("../font/Hacen_Saudi_Arabia.woff") format("woff") !important;
    src: url("../font/Hacen_Saudi_Arabia.ttf") format("truetype") !important;
    src:url("../font/Hacen_Saudi_Arabia.svg#HacenSaudiArabia") format("svg") !important;
}
.sample
{
    font-family:"Hacen Saudi Arabia" !important;
}

описание: Введите выше код в файл CSS или код здесь. В приведенном выше примере замените "Hacen Saudi Arabia" на font-family и замените url в соответствии с вашим каталогом шрифтов.

Если вы входите !важно в вашем браузере CSS код автоматически фокусироваться на этом разделе и переопределить ранее используемое имущество. Для более подробной информации посетите: https://answerdone.blogspot.com/2017/06/font-face-not-working-solution.html


У меня была такая же проблема и я решил ее, добавив мета для контента:

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">

это происходит в Firefox и Edge, если у вас есть тексты Unicode в вашем html.


Я не знаю, как вы создали синтаксис, поскольку я никогда не использовал svg в объявлении шрифта, но Font Squirel имеет действительно хороший инструмент для создания пуленепробиваемого синтаксиса шрифта из одного шрифта.

http://www.fontsquirrel.com/fontface/generator


также может использоваться URL-адрес в пути тега font-face. Если вы используете "http://domain.com" это не работает в Firefox, для меня изменение его на "http://www.domain.com-сработало.


моя проблема заключалась в том, что Windows назвала шрифт "шрифт".TTF и firefox ожидаемый шрифт.ttf ' я увидел, что после открытия моего проекта в linux, переименовал шрифт в имя propper и все работает