2020年的杀手级解决方案
该解决方案一定是在最初提出该问题后的九年提出的,因为直到最近,大多数浏览器还无法处理.svg
格式的网站图标。
事实不再如此。
请参阅:https://caniuse.com/#feat=link-icon-svg
1)选择SVG作为Favicon格式
目前,在2020年6月,这些浏览器可以处理SVG Favicons:
- 铬
- 火狐浏览器
- 边缘
- 歌剧
- 适用于Android的Chrome
- KaiOS浏览器
请注意,这些浏览器仍然无法:
- 苹果浏览器
- iOS Safari
- Android版Firefox
考虑到以上所述,我们可以放心地使用SVG Favicon。
2)将SVG呈现为数据URI
这里的主要目的是避免HTTP请求。
正如其他解决方案所提到的,执行此操作的一种非常聪明的方法是使用Data URI而不是HTTP URL。
SVG(尤其是小型SVG)非常适合于Data URI,因为后者是简单的纯文本(任何可能含糊的字符百分比编码),而前者(即XML)可以写成一长行的纯文本(带有少量内容)百分比代码)。
3)整个 SVG都是表情符号
在2019年12月,Leandro Linares是第一个意识到自Chrome加入Firefox以来就支持SVG Favicons的人之一,值得尝试看看是否可以从表情符号中创建favicon:
https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/
利纳雷斯的直觉是正确的。
几个月后(2020年3月),Code Pirate Lea Verou意识到了同样的事情:
https://twitter.com/leaverou/status/1241619866475474946
网站图标再也不会一样了。
4)自己实施解决方案:
这是一个简单的SVG:
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 16 16">
<text x="0" y="14">🦄</text>
</svg>
这是与数据URI相同的SVG :
data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E
最后,这是Data URI作为Favicon:
<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />
5)更多技巧
由于Favicon是SVG,因此可以对其应用任何数量的滤镜效果(SVG和CSS)。
例如,除了上面的白色Unicorn Favicon外,我们还可以通过应用过滤器轻松制作Black Unicorn Favicon:
style="filter: invert(100%);"
黑色独角兽图标:
<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%20style='filter:%20invert(100%);'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />