html5 svg 信箱图标,在网页中使用内联SVG图标和字体图标的比较
如果你要在你的网站中创建一个图标系统,你可以有不少的选择。如果你希望使用图片来制作图标,可以使用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图标和字体图标的比较相关推荐
- html中svg的css,HTML5 内联 SVG
什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺 ...
- HTML5 Canvas、内联 SVG、Canvas vs. SVG
canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...
- html5svg在线编辑器,HTML5 内联 SVG
HTML5 内联 SVG HTML5 支持内联 SVG. SVG Sorry, your browser does not support inline SVG. 什么是SVG? SVG 指可伸缩矢量 ...
- 利用正则表达式提取网页中Table内的数据
利用正则表达式提取网页中Table内的数据 using System; using System.Collections.Generic; using System.Linq; using Syste ...
- html内嵌框架怎么写,在HTML网页中,内嵌框架的标签代码是()。
在HTML网页中,内嵌框架的标签代码是(). 更多相关问题 每年人环奖的考试报名时间大约在5月份 嗅觉的香气包裹在闻气味的人周围,成为一种氛围,构成( )天空. Access的控件对象可以设置某个属性 ...
- Froala Editor内容中删除内联样式
Froala Editor内容中删除内联样式 易于集成-编辑器可以在任何时间内集成到任何类型的项目中.它只需要基本的JavaScript和HTML编码知识. 流行-HTML编辑器在开发人员中很流行,它 ...
- 079_html5内联SVG
1. html5支持内联SVG. 2. 什么是SVG? 2.1. SVG指可伸缩矢量图形(Scalable Vector Graphics). 2.2. SVG用于定义用于网络的基于矢量的图形. 2. ...
- confluence 字体_atlassian - 如何在Confluence中格式化内联代码?
atlassian - 如何在Confluence中格式化内联代码? 如何在Confluence like this中格式化inline code? 我的意思是,不是单独的代码块,而是内联classn ...
- Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...
我在硬故障处理程序中有一些程序集.程序集基本上是为了传递当前堆栈指针作为参数(在R0中).它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数? __asm(&quo ...
最新文章
- HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3
- 自己动手实现简单权限控制
- php-fpm进程关闭与重启脚本详解(转)
- Java连接数据库出现java.sql.SQLException: After end of result set的原因
- 数据结构之Trie树
- Nginx的正向代理与反向代理
- Cortex-M3-建立向量表
- 李超:WebRTC传输与服务质量
- 单例模式的七种写法(转)
- unity如何往下挖地形_Unreal Engine地形系统辨析(一)
- 结对编程作业---电梯调度程序
- iPad和iPhone上的应用程序图标
- 49. 模型层 --- dao 层
- Linux 如何配置 SFTP 来代替单一ftp应用
- minidump详细介绍
- Java Swing窗体JFrame之窗体美化-窗体及组件外观设置
- Mybatis遇到No constructor found in ....的解决方法
- 消息: Automation 服务器不能创建对象
- Java开发工程师的工作内容包含哪些?
- StateFlow-自动变速逻辑搭建