Kailang Blog

React Icon SVG2019-07-10Θ

最近在关注 material-ui 和 ant-design, 发现两者都力挺使用 SVG 作为图标字体使用,调研了下,社区目前流行两种方案:Inline SVG(代码块)、Icon Font。

社区讨论#

Material-ui docs#

material-ui svg icon

Ant-design discuss#

ant-designsvg icon

两者比较#

对象Icon FontInline SVG
矢量浏览器当成常规字体,图标是反锯齿的(anti-aliased)、造成部分模糊不清浏览器将 SVG 当成图片、并且是矢量(vector)
大小1. 很小
2. 浏览器缓存
不会被浏览器缓存
CSS 控制font-size, color, shadows, ...1. 相同的 CSS 控制
2. 控制图标的各个部分 EX
3. 使用 SVG 特定 CSS
异常失败1. 没有正确的 CORS 跨域问题
2. 网络慢、服务器故障导致字体文件无法加载(图标呈现方块)
3. @font-face 兼容性问题
浏览器兼容性
人为失败1. 代理浏览器不支持
2. 设置禁用自定义字体
3. 强制使用自己的字体覆盖
语义SVG 对浏览器提供了友好的可访问性,比如 <title>,<desc> 等,而且同 WAI-ARIA (aria-labelledby 属性)兼容
处理方式1. 只能按需补充
2. 创建图标字体很麻烦,要使用 IcoMoonfontello等工具
1. 随时补充、按需加载
2. 设计直接提供、稍作处理就可以使用
浏览器支持IE6IE8+、Android 2.3+

参考#