症状
测试发现element-plus的字体图标偶现乱码,如下图
出现乱码的情况是偶发的,不是每一台电脑都会出现,没有办法找到稳定的复现方法,并且出现的频率不低不足以忽略这个问题。
分析
找到一台复现频率比较高的电脑,刷新了几个小时总算发现了一些规律。
-
首先观察到是编码问题,乱码时,比方说一个element-icon
\e6a0
字符被解析成为了3个字符,然后浏览器使用了微软雅黑字体库显示,而正常显示图标时,\e6a0
被解析为一个字符,使用element-icons字体库显示。 -
出现编码问题时,浏览器开发者工具Network工具栏里没有字体所在的css文件的下载记录,但是在source里又可以看到该css,而且显示为3个字符。这是很异常的,因为即使是使用缓存,Network里也应该有记录。字体正常显示时,css在Network面板里是有记录的。故怀疑还是浏览器哪里出了问题。
-
该问题同样出现在element-ui中。
解决方案
-
element-plus 可以升级到1.2版本及以上,1.2版本后element-plus使用svg图标,不再使用字体图标,不再出现该问题。
-
观察到是css文件的问题,将
el-icon-
相关的类都复制到index.html
的style
标签里,注意要让style标签里的类的权重高于element的类,可以解决。 -
搜索发现有其他人遇到过相关问题,将dart-sass换成node-sass可解决,经尝试也是可行的。