如果你要在你的网站中创建一个图标系统,你可以有不少的选择。如果你希望使用图片来制作图标,可以使用CSS sprites(CSS雪碧)技术。如果你希望使用矢量图来作为图标(这是时下非常流行的做法),你可以有两个选择:使用内联的SVG或使用字体图标。

下面让我们来对它们做一个完整的比较。

矢量图标

使用矢量图标有一个很大的好处:放大和缩小矢量图标不会丢失细节,发生变形等情况,在视网膜显示器(retina displays)中显示格外清晰,并且矢量文件的大小非常的小。

Icon Font

Inline SVG

浏览器会认为字体图标是一种字体,所以显示的图标是会有一些锯齿,并不是完全的平滑锐利。

完全的矢量图形,线条平滑锐利。

下图中展示了字体图标和SVG图标的一些细小差别,字体图标有时候不够清晰。

CSS控制

Icon Font

Inline SVG

你可以通过font-size来控制字体图标的大小。还可以使用color来改变颜色,还可以使用CSS来为它添加阴影和使它旋转等等。

SVG图标可以实现CSS对字体图标控制的全部功能。并且可以表现得更好,因为你可以控制整个SVG图标得某一个部分,你还可以使用SVG独有的CSS控制,如stroke属性等。

在CSS控制方面SVG图标的最大优势是可以在同一个图标渲染出多种颜色。

定位

Icon Font

Inline SVG

字体图标的定位较难控制。字体图标都是通过伪元素来插入页面,它依赖于line-height、vertical-align、letter-spacing、word-spacing等属性。

SVG图标只是靠它的尺寸大小来定位。

下面的两张图展示了字体图标和SVG图标的定位方式:

某些奇怪的问题

Icon Font

Inline SVG

在调用字体图标的时候有可能会失败:在跨域调用字体图标的时候,没有在页面的header中写上正确的CORS属性的时候,Firefox浏览器会显示不正确;还有其它原因导致的无法显示:网络问题、服务器问题等;在使用@font-face的时候,Chrome浏览器会有一些bug;windows phone在使用IE9时不支持@font-face。

SVG图标可以正确的在页面中显示。如果浏览器支持SVG,就可以正确的显示它。

语法

Icon Font

Inline SVG

使用字体图标必须通过一个空的或元素来实现。这在语义上给人的感觉不是十分的友好。

SVG图标就是一幅图片。标签能够正确表达出这就是一幅矢量图片。

易用性

Icon Font

Inline SVG

如果使用一个创建好的字体图标库(如Font Awesome)显得有点冗余,你使用到的图标只是很少很少的一部分。如果你要创建自己的字体图标库也不是一件十分容易的事情。创建自己的字体图标可以通过Pictos Server或IcoMoon来完成。

SVG图标使用非常简单,你可以完全手动处理。也可以使用IcoMoon来创建。或者使用一些辅助工具。

浏览器支持

Icon Font

Inline SVG

广泛支持,包括IE6。

IE8以下以及Android 2.3以下的浏览器不支持SVG图标。

小结

使用字体图标和SVG图标的优劣,这一切都归结到浏览器的支持。如果你打算支持 IE 9+ / Android 3+ 以上的浏览器,那么使用SVG图标是最佳选择。如果你需要更加广泛的浏览器的支持,建议使用字体图标。虽然可以在使用SVG图标时给出回退方法,但是这是一笔庞大的开销:需要管理一组PNG图片,还要在页面中插入一个额外的元素来显示PNG图片,隐藏SVG元素等等。这样做显得十分笨重!

html5 svg 信箱图标,在网页中使用内联SVG图标和字体图标的比较相关推荐

  1. html中svg的css,HTML5 内联 SVG

    什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺 ...

  2. HTML5 Canvas、内联 SVG、Canvas vs. SVG

    canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...

  3. html5svg在线编辑器,HTML5 内联 SVG

    HTML5 内联 SVG HTML5 支持内联 SVG. SVG Sorry, your browser does not support inline SVG. 什么是SVG? SVG 指可伸缩矢量 ...

  4. 利用正则表达式提取网页中Table内的数据

    利用正则表达式提取网页中Table内的数据 using System; using System.Collections.Generic; using System.Linq; using Syste ...

  5. html内嵌框架怎么写,在HTML网页中,内嵌框架的标签代码是()。

    在HTML网页中,内嵌框架的标签代码是(). 更多相关问题 每年人环奖的考试报名时间大约在5月份 嗅觉的香气包裹在闻气味的人周围,成为一种氛围,构成( )天空. Access的控件对象可以设置某个属性 ...

  6. Froala Editor内容中删除内联样式

    Froala Editor内容中删除内联样式 易于集成-编辑器可以在任何时间内集成到任何类型的项目中.它只需要基本的JavaScript和HTML编码知识. 流行-HTML编辑器在开发人员中很流行,它 ...

  7. 079_html5内联SVG

    1. html5支持内联SVG. 2. 什么是SVG? 2.1. SVG指可伸缩矢量图形(Scalable Vector Graphics). 2.2. SVG用于定义用于网络的基于矢量的图形. 2. ...

  8. confluence 字体_atlassian - 如何在Confluence中格式化内联代码?

    atlassian - 如何在Confluence中格式化内联代码? 如何在Confluence like this中格式化inline code? 我的意思是,不是单独的代码块,而是内联classn ...

  9. Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...

    我在硬故障处理程序中有一些程序集.程序集基本上是为了传递当前堆栈指针作为参数(在R0中).它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数? __asm(&quo ...

最新文章

  1. HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3
  2. 自己动手实现简单权限控制
  3. php-fpm进程关闭与重启脚本详解(转)
  4. Java连接数据库出现java.sql.SQLException: After end of result set的原因
  5. 数据结构之Trie树
  6. Nginx的正向代理与反向代理
  7. Cortex-M3-建立向量表
  8. 李超:WebRTC传输与服务质量
  9. 单例模式的七种写法(转)
  10. unity如何往下挖地形_Unreal Engine地形系统辨析(一)
  11. 结对编程作业---电梯调度程序
  12. iPad和iPhone上的应用程序图标
  13. 49. 模型层 --- dao 层
  14. Linux 如何配置 SFTP 来代替单一ftp应用
  15. minidump详细介绍
  16. Java Swing窗体JFrame之窗体美化-窗体及组件外观设置
  17. Mybatis遇到No constructor found in ....的解决方法
  18. 消息: Automation 服务器不能创建对象
  19. Java开发工程师的工作内容包含哪些?
  20. StateFlow-自动变速逻辑搭建

热门文章

  1. 使用Cython打包成pyd文件
  2. 学雷锋志愿魂·手抄报见行动
  3. PP助手联手墨迹天气 未来用大数据服务用户
  4. netlink怎么读_如何使用VB访问NETLINK并读写S7300 PLC数据
  5. Nexus入门指南(图文)
  6. CAN总线波特率计算及设置方法(STM32,SJA1000,LPC2292)
  7. 全国计算机等级考试准考证号忘了怎么查成绩
  8. fdisk -l文件详解
  9. arcgis-maps-sdk-unity-1.0.0.tgz
  10. 解决谷歌安装插件失败问题