如何添加 favicon
把图标保存到网站上,然后在 <head> 中用 <link rel="icon"> 标签指向它:
<link rel="icon" href="/favicon.ico">
对于一个基础网站,这就是全部答案。href 可以指向 .ico、.png 或 .svg 文件。下面的示例把 SVG 作为 data URI 直接写进 href,所以不需要单独的文件。嵌在另一个页面里的预览无法修改你的浏览器标签页,所以脚本在一个模拟标签页里画出同一个图标,并显示三种尺寸:
在 16 像素下,只够放一个粗体字母或一个简单形状,细节都会消失。先按最小尺寸设计图标。把 fill='%232563eb' 改成别的颜色(%23 是 URL 编码后的 #),每个副本都会随之更新。
需要提供哪些文件
浏览器、手机和应用启动器会寻找不同的图标。下面这一小组文件就能全部覆盖:
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/manifest.webmanifest">
| 文件 | 尺寸 | 用途 |
|---|---|---|
favicon.ico | 32×32 | 浏览器标签页,以及只会查找 /favicon.ico 的工具 |
icon.svg | 任意(矢量) | 在 Chrome、Edge 和 Firefox 中,让标签页图标在任何屏幕密度下都清晰 |
apple-touch-icon.png | 180×180 | 有人把你的网站添加到 iPhone 或 iPad 主屏幕时显示的图标 |
| manifest 图标 | 192×192 和 512×512 PNG | Android 主屏幕和已安装的 Web 应用 |
页面没有图标链接时,大多数浏览器也会自动向网站根目录请求 /favicon.ico,所以在那里放一个 favicon.ico 是很实用的默认做法。sizes 属性告诉浏览器每个文件的尺寸,让它挑选最合适的一个。请用 rel="icon";旧的 rel="shortcut icon" 之所以还能用,只是因为浏览器会忽略多出来的那个词。
emoji favicon
做原型或个人页面时,用 emoji 能快速做出一个 favicon。把它放进 SVG 的 <text> 元素里:
%F0%9F%8D%AA 是 URL 编码后的饼干 emoji。emoji 由操作系统的 emoji 字体绘制,所以在 Windows、macOS 和 Android 上看起来各不相同;对于正式产品,专门设计的图标是更好的选择。
跟随深色模式的图标
SVG favicon 可以自带 CSS,包括 prefers-color-scheme 媒体查询,所以浏览器使用深色主题时,深色图标可以变成浅色:
<!-- icon.svg -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<style>
circle { fill: #111827; }
@media (prefers-color-scheme: dark) { circle { fill: #f9fafb; } }
</style>
<circle cx="16" cy="16" r="14"/>
</svg>
用 JavaScript 修改 favicon
网站会用变化的 favicon 显示通知小红点或状态颜色。在 <canvas> 上画出新图标,再把链接的 href 设为画布图像:
在 Chrome 或 Firefox 的真实页面中,每次设置 href,标签页图标都会改变,时机和这里预览图片的变化完全一样。
常见错误
- 路径错误。
href="favicon.ico"是相对于当前页面的,所以在/blog/post上会失效。请用根路径:href="/favicon.ico"。 - 以为更新会立即显示。 浏览器会牢牢缓存 favicon。替换图标后,清除缓存重新加载,或者修改 URL(
/favicon.ico?v=2)。 - 把细节丰富的标志缩小到 16 像素。 把它简化:一个字母或一个形状,对比要强烈。
- 只提供 SVG。 同时保留 ICO 或 PNG,供不支持 SVG favicon 的浏览器使用,并为 iOS 加上
apple-touch-icon。 - 把链接放在
<body>里。 把它和 title 标签及其他元数据一起放在<head>中。
常见问题
HTML 中怎么添加 favicon?
把图标文件放到网站上,然后在 <head> 中加上 <link rel="icon" href="/favicon.ico">(也可以是 PNG 或 SVG 的路径)。浏览器就会在标签页、书签和历史记录中显示它。
favicon 应该是多大尺寸?
为标签页提供一个 32×32 的 favicon.ico(或 PNG),一个可以缩放到任意尺寸的 SVG,以及一个 180×180 的 PNG apple-touch-icon,用于 iPhone 主屏幕。带 manifest 的 Web 应用还要列出 192×192 和 512×512 的 PNG。
为什么我的 favicon 不显示?
常见原因是 href 中的路径写错、<link> 不在 <head> 里,或者浏览器还在显示缓存的旧图标。直接打开图标的 URL 检查路径,然后清除缓存重新加载,或者在 URL 后面加上版本号,例如 ?v=2。
可以用 SVG 或 PNG 作为 favicon 吗?
可以。使用 <link rel="icon" href="/icon.svg" type="image/svg+xml"> 或 <link rel="icon" href="/icon.png" type="image/png">。SVG 在 Chrome、Edge 和 Firefox 中有效;同时保留一个 ICO 或 PNG,供不支持 SVG 的浏览器使用。
需要写 rel="shortcut icon" 吗?
不需要。rel="icon" 才是标准写法。shortcut 这个词是旧版 Internet Explorer 的遗留物,在现代浏览器中没有任何作用。
可以用 emoji 作为 favicon 吗?
可以,把它包在 SVG 里即可:一个 SVG data URI,其中的 <text> 元素包含这个 emoji。做原型时很方便,但 emoji 在不同操作系统上看起来不一样。