移动端字体图标不显示的Bug

用16进制编码的字体图标在部分小米机型显示不正常。

测试机型:小米1,小米1s,小米2
浏览器:微信6.1内置浏览器,QQ浏览器 5.7 X5内核
字体图标:不显示
svg图标:显示正常

以下来自额微信内置浏览器的截图,字体图标不显示。

内置浏览器,uc浏览器,正常显示,以下为内置浏览器截图。

 

如 Glyphicons 官网的字体图标就显示不正常,svg图标显示正常。

Glyphicons 官网:http://glyphicons.com/

截图来自QQ浏览器(新版微信采用QQ浏览器内核)访问Glyphicons 官网,右侧杯子部分是SVG的图片,显示正常;右侧红色标签隔壁空白部分,一堆的iconfont图标都显示异常。

 

国内阿里Iconfont:http://www.iconfont.cn/    官网采用SVG绘制正常显示,下载回来的demo显示不正常。

以下截图来自阿里Iconfont下载回来的demo。

 

 偶尔发现icomoon首页的图标采用了字体图标,但是能正常显示。
icomoon官网地址:https://icomoon.io/
/* icomoon 的@font-face声明字体如下*/
   @font-face {
        font-family: 'icomoonio';
        src: url("https://s3.amazonaws.com/icomoon.io/4/icomoonio/icomoonio.eot?bqv7mo");
        src: url("https://s3.amazonaws.com/icomoon.io/4/icomoonio/icomoonio.eot?#iefixbqv7mo") format("embedded-opentype"),
        url("https://s3.amazonaws.com/icomoon.io/4/icomoonio/icomoonio.svg?bqv7mo#icomoonio") format("svg"),
        url("https://s3.amazonaws.com/icomoon.io/4/icomoonio/icomoonio.woff?bqv7mo") format("woff"),
        url("https://s3.amazonaws.com/icomoon.io/4/icomoonio/icomoonio.ttf?bqv7mo") format("truetype");
        font-weight: normal;
        font-style: normal
    }
/*定义使用iconfont的样式*/
    .ff-icomoon {
        font-family: 'icomoonio'
    }
/*获取字体编码,应用于页面*/
    [data-icon]:before {
        font-family: 'icomoonio';
        content: attr(data-icon);   /*获取标签的data-icon字体编码,与平常我们的方式不太一样*/
        speak: none;                /*取消发音*/
        line-height: 0
    }  
各种分析调试对比后发现,原来是加载顺序有问题。

移动端有问题的加载顺序:eto,woff,ttf,svg
//有兼容问题的字体图标加载顺序
@font-face {font-family: "iconfont";
  src: url('iconfont.eot'); /* IE9*/
  src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
  url('iconfont.woff') format('woff'), /* chrome、firefox */
  url('iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
  url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
}
移动端字体图标加载顺序应该为 eto,svg,woff,ttf(把SVG放到前面) 
//移动端字体图标
@font-face {font-family: "iconfont";
  src: url('../font/iconfont.eot'); /* IE9*/
  src: url('../font/iconfont.svg#iconfont') format('svg'), /* iOS 4.1- */
  url('../font/iconfont.woff') format('woff'), /* chrome、firefox */
  url('../font/iconfont.ttf') format('truetype'); /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/ 
}
 
 
 不过用fiddler抓包,只看到手机请求了svg,兼容情况良好。
 
SVG字体兼容如下图: http://caniuse.com/#search=svg%20font
 
据说安卓4.1一下不支持SVG,但是没机器,测试不了,有Android 2.3的朋友帮忙测一下给个留言感激不尽。
 
 
在ios系统图标会往下错位,如下图:
 
设置一下默认行高为1即可。
.iconfont{line-height:1;}

设置默认行高后。

 
原文地址:https://www.cnblogs.com/Megasu/p/4305116.html