IE不支持WOFF2格式,必须将EOT置于@font-face的src首位并带?#iefix参数,严格使用小写format声明,且font-display无效;需通过UA检测或构建分流提供专用字体方案。

IE 不支持 @font-face 的 WOFF2 格式
IE 完全不识别 woff2,哪怕你只在 @font-face 的 src 列表里写了一行 url('font.woff2') format('woff2'),整个规则在 IE 中都会被忽略——字体不会加载,也不会 fallback 到下一个 src。这不是优先级问题,是解析层面直接跳过。
- 必须把
woff2条目放在woff或eot之后,且不能依赖它触发加载 - IE 11 及以下只认
eot(首选)、woff(IE9+)、ttf(极少数情况) - 别用在线字体服务(如 Google Fonts)的默认链接,它们通常只提供
woff2+woff,缺eot
@font-face 中 src 的顺序和格式声明必须严格匹配 IE 要求
IE 对 src 声明非常挑剔:它要求 eot 必须第一个,且带问号参数(用于触发 IE 特殊解析),否则即使文件存在也不加载;同时,format() 的字符串必须小写、拼写准确,比如 format('embedded-opentype') 写成 'embedded-opentype' 少了引号或大小写错,整条规则失效。
@font-face {
font-family: 'MyFont';
src: url('myfont.eot'); /* IE9 及以下必需的兜底 */
src: url('myfont.eot?#iefix') format('embedded-opentype'), /* IE6–IE8 关键:带 ?#iefix */
url('myfont.woff') format('woff'), /* IE9+ */
url('myfont.ttf') format('truetype'); /* 兜底,部分旧 IE 可能用到 */
}IE 中 font-display 被完全忽略,且字体加载阻塞渲染
font-display: swap 这类现代属性在 IE 中无任何效果,IE 默认行为是“等待字体加载完成才渲染文本”,导致空白闪烁或长时间显示默认字体。你无法用 CSS 控制它,只能靠预加载 + 缓存策略缓解。
- 不要指望
font-display在 IE 生效,删掉它或用条件注释隔离 - 确保
.eot文件体积小(一般 ≤ 50KB),避免首屏阻塞过久 - 使用
预加载.eot,但需配合as="font"和type="application/vnd.ms-fontobject"
HTML 条件注释已失效,改用 JavaScript 特征检测判断 IE
IE10+ 已废弃条件注释(),但很多老项目仍残留这类写法,结果在 IE11 中反而不生效。真正可靠的判断方式是检查 document.documentMode 或 window.navigator.userAgent 中的 MSIE / Trident。
立即学习“前端免费学习笔记(深入)”;
if (navigator.userAgent.indexOf('MSIE') !== -1 || !!navigator.userAgent.match(/Trident.*rv:11\./)) {
// 是 IE,可动态插入 eot 专用样式或替换 font-family
document.documentElement.classList.add('ie');
}更稳妥的做法是在构建时输出两套字体 CSS:一套给现代浏览器(含 woff2),一套专供 IE(仅 eot + woff),通过服务器 User-Agent 分流或前端加载逻辑区分。
IE 的字体问题从来不是“加个格式就完事”,关键在顺序、后缀、参数、加载时机四者严丝合缝——漏一个,字体就回退到宋体。









