IE浏览器html5字体显示异_修正IE的html5字体法【正字】

10次阅读

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

IE浏览器html5字体显示异_修正IE的html5字体法【正字】

IE 不支持 @font-face 的 WOFF2 格式

IE 完全不识别 woff2,哪怕你只在 @font-facesrc 列表里写了一行 url('font.woff2') format('woff2'),整个规则在 IE 中都会被忽略——字体不会加载,也不会 fallback 到下一个 src。这不是优先级问题,是解析层面直接跳过。

  • 必须把 woff2 条目放在 woffeot 之后,且不能依赖它触发加载
  • IE 11 及以下只认 eot(首选)、woff(IE9+)、ttf(极少数情况)
  • 别用在线字体服务(如 google Fonts)的默认链接,它们通常只提供 woff2 + woff,缺 eot

@font-facesrc 的顺序和格式声明必须严格匹配 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.documentModewindow.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 的字体问题从来不是“加个格式就完事”,关键在顺序、后缀、参数、加载时机四者严丝合缝——漏一个,字体就回退到宋体。

text=ZqhQzanResources