Favicon
0 条参与背景
Favicon是整个网页中一个非常小的组成部分,它虽然并不起眼,但若被精心设计,却可以让网页变得精致、有趣。
Favicon,即favorites icon。页面中引入Favicon,能使浏览器收藏夹中的快捷方式不仅显示网站的标题,还显示网站管理员为这个网站制作的特定icon。在部分浏览器中,标签页上、搜索栏中,也能显示这个icon,比如:
Mac下Safari浏览器的搜索栏:
Mac下Chrome的Tab&收藏夹:
通过对Favicon做一些定制,我们能做一些有趣的效果,比如:
Loading动画:
提示当前登录账户的未读通知数:
Favicon用法
引入
默认情况下,会从WEB服务器的根目录读取favicon.ico
文件。因此,只要在WEB服务器根目录放置了favicon.ico
,就会被浏览器使用。
也可以在网页的头部<head>
标签中,使用<link>
标签指定引入:
|
|
rel
属性声明引入Favicon文件。
href
属性声明Favicon文件的路径,可以是类似/path/to/favicon.ico
的绝对路径,也可以是链向外部的完整URLhttps://www.baidu.com/favicon.ico
。部分浏览器(如IE7)不支持完整URL方式引入。
type
属性声明Favicon的MIME类型,之后会介绍。
sizes
属性声明图片的尺寸,值为HeightxWidth
或any
。位图使用HeightxWidth
,可伸缩的图(如svg)使用any
。现在这个属性没有浏览器支持。
|
|
|
|
|
|
格式
常见的favicon的格式有.ico
、.png
、.svg
、.gif
。
.ico
文件的兼容性最好,所有浏览器都支持MIME类型为image/vnd.microsoft.icon
的.ico
图标,这也是最早支持的格式。
.png
与.ico
使用上基本没有差别,但市面上制作、处理.png
的工具更多,应用更广。.png
的兼容性不如.ico
。
.svg
的优势在于,高分辨率屏幕下,图片不会模糊。
.gif
的favicon在部分浏览器下能实现动画效果。将favicon设置为如下.gif
图:
在firefox中,有动态效果:
IE9及以下(以上待测)不支持.gif
格式,显示默认图标;chrome不支持动画,显示静态图。
加载顺序
浏览器加载favicon的顺序,如下图所示:
举个例子,Bing通过href
引入了后缀为.ico
但实际为png格式的图片:
|
|
Chrome支持png格式,打开后能正常显示:
IE9打开后显示浏览器默认图标:
详细兼容性见图片格式兼容性。
当页面中引入多个favicon时,各浏览器中加载顺序有所不同,比如:
|
|
Chrome中显示type="image/vnd.microsoft.icon"
的icon,而firefox中显示后出现的icon。还有更加复杂的情况,引用弄懂Favicon这篇文章的内容:
令我沮丧的是,Chrome,Firefox,Opera 7+,和Safari 4+都支持PNG格式的favicon,但是Chrome和Safari在两种格式都提供的情况下却会使用ICO格式,而且完全无视favicon的声明顺序。另一方面,IE不支持PNG格式的favicon,但是它会忽略PNG格式的声明以及声明顺序而直接使用ICO格式的favicon。
那些兼容PNG格式favicon的浏览器是如何确定使用哪个favicon的?Firefox和Safari会使用最后声明的那个。Chrome for Mac只会使用32×32大小的ICO格式。Chrome for Windows会首选16×16大小的ICO格式。如果在没有上述选项的情况下,两种平台的Chrome都会使用第一个声明的favicon,这点正好与Firefox和Safari相反。Chrome for Mac确实会忽略16×16的favicon而直接使用32×32的,如果在非视网膜屏的设备上就会把它缩小到16×16。Opera则完全是一种中立的态度,它会从所有声明的可用的favicon中完全随机地选择一个。我喜欢Opera这种做法。
为了保证加载正确的favicon,我们可以根据浏览器UA,动态添加favicon:
|
|
动态favicon
利用.gif
,可以让favicon“动起来”,但它仅在部分浏览器中“能动”。如果要展现与页面内容相关的信息(如上述提到的“提示当前登录账户的未读通知数”),它就无能为力了。这时候,我们可以借助javascript,来实现这些功能。很幸运,业内已经有了一些开源的库:
我们能用这些库,来做许多有趣的事情,比如包括之前提到的:
Loading动画:
为favicon添加徽章(提示当前登录账户的未读通知数):
同步显示正在播放的视频:
Piecon实现动画参考了Tinycon,与favico一样,都是基于Canvas,原理大致如下:
有兴趣的话,可以点击链接,查看它们的源码。
这些库的兼容性考虑Canvas的兼容性以及图片格式兼容性。
结语
利用favicon这个“小东西”,我们可以在浏览器中印上特别的logo,可以附加提示信息,还可以做许多有趣的事情。假如,在切换浏览器标签页后,favicon变成了“很有趣”的东西,这会不会吸引你再次点开这个页面呢?
除开favicon,触摸图标(touch icons)和磁贴图标(tile icons)也是很实用的图标。如何利用这些图标来装点你的网站,等待你来发现。
附录
MIME类型
图片格式兼容性
图片来源:Can I use favicon?
PNG兼容性:
SVG兼容性:
Canvas兼容性
图片来源:Can I use canvas?