Skip to content

favicon 图标 ​

Favicon(Favorites Icon)是显示在浏览器标签页、书签、历史记录等位置的网站小图标。正确配置 favicon 能提升品牌识别度和用户体验。

前置知识

阅读本节前,建议先了解:CSS 样式引入

基础概念 ​

什么是 Favicon ​

Favicon 是网站的"头像",它出现在以下位置:

位置说明
浏览器标签页标签页左侧的小图标
书签栏收藏夹中的网站图标
浏览器历史历史记录列表中的图标
手机主屏幕添加到主屏幕时的应用图标(apple-touch-icon)
桌面快捷方式创建桌面快捷方式时的图标
Windows 任务栏固定到任务栏时的图标

Favicon 的格式演进 ​

格式扩展名特点推荐程度
ICO.ico传统格式,支持多尺寸嵌入兼容旧浏览器
PNG.png支持透明背景推荐
SVG.svg矢量图标,任意缩放不失真强烈推荐
WebP.webp现代图片格式Chrome 支持较好

语法 ​

基本配置 ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>网站标题</title>

  <!-- Favicon 图标配置 -->
  <link rel="icon" type="image/svg+xml" href="/favicon.svg">
  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
</head>
<body>
  <!-- 页面内容 -->
</body>
</html>

传统 ICO 方式(兼容旧浏览器) ​

html
<!-- 最简方式(兼容所有浏览器) -->
<link rel="icon" href="/favicon.ico" type="image/x-icon">

<!-- 指定尺寸 -->
<link rel="icon" href="/favicon.ico" sizes="48x48">

现代多尺寸配置 ​

html
<!-- SVG 图标(推荐,现代浏览器) -->
<link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="any">

<!-- PNG 图标(兼容不支持 SVG 的浏览器) -->
<link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png">
<link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png">
<link rel="icon" href="/favicon-192x192.png" sizes="192x192" type="image/png">

<!-- Apple Touch Icon(iOS 添加到主屏幕) -->
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">

<!-- Apple Touch Icon(不同尺寸) -->
<link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">

详细说明 ​

各平台所需的图标尺寸 ​

桌面浏览器 ​

图标尺寸用途格式
16x16浏览器标签页(小)ICO / PNG
32x32浏览器标签页(标准)ICO / PNG
48x48Windows 站点图标ICO

iOS(Safari) ​

图标尺寸用途格式
120x120iPhone(非 Retina)PNG
152x152iPadPNG
167x167iPad Pro(10.5")PNG
180x180iPhone(Retina)PNG

Android(Chrome) ​

图标尺寸用途格式
192x192Android ChromePNG
512x512PWA 启动画面PNG

Windows ​

图标尺寸用途格式
70x70缩小后的任务栏PNG
144x144中等大小磁贴PNG
150x150小磁贴PNG
310x310大磁贴PNG

Web App Manifest 中的图标 ​

对于 PWA(渐进式 Web 应用),还需要在 site.webmanifest 文件中声明图标:

json
{
  "name": "我的网站",
  "short_name": "我的网站",
  "icons": [
    {
      "src": "/icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-maskable-192x192.png",
      "sizes": "192x192",
      "type": "image/png",
      "purpose": "maskable"
    },
    {
      "src": "/icons/icon-maskable-512x512.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "maskable"
    }
  ],
  "theme_color": "#0066cc",
  "background_color": "#ffffff",
  "display": "standalone"
}

在 HTML 中引用 manifest:

html
<link rel="manifest" href="/site.webmanifest">

浏览器选择 Favicon 的优先级 ​

浏览器按以下优先级选择要显示的 favicon:

  1. <link rel="icon" type="image/svg+xml">(SVG 最优先)
  2. <link rel="icon" sizes="32x32">(最匹配的尺寸)
  3. <link rel="icon" sizes="16x16">
  4. <link rel="icon">(不指定 sizes)
  5. /favicon.ico(默认路径,即使没有 link 标签)

自动发现

即使不写 <link> 标签,浏览器也会自动请求 /favicon.ico。这是最传统的 favicon 加载方式,但推荐显式声明。

apple-touch-icon 详解 ​

apple-touch-icon 是苹果设备特有的图标配置,用于"添加到主屏幕"功能:

html
<!-- 标准配置 -->
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">

<!-- 带圆角和光泽效果(已废弃,iOS 7+ 不再需要) -->
<!-- <link rel="apple-touch-icon-precomposed" sizes="180x180" href="/apple-touch-icon.png"> -->

apple-touch-icon 的特点:

  • 不需要 type 属性
  • iOS 会自动为图标添加圆角
  • 图标应该设计为 180x180px,不需要额外添加系统效果

mask-icon(Safari Pinned Tab) ​

html
<!-- Safari 固定标签页图标 -->
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#0066cc">
  • 图标必须是单色的 SVG
  • color 属性指定图标的颜色
  • 仅在 Safari 9+ 中有效

实战示例 ​

完整的 favicon 配置模板 ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>完整的 Favicon 配置</title>

  <!-- SVG Favicon(现代浏览器首选) -->
  <link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="any">

  <!-- PNG Favicon(兼容不支持 SVG 的浏览器) -->
  <link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png">
  <link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png">
  <link rel="icon" href="/favicon-192x192.png" sizes="192x192" type="image/png">

  <!-- ICO Favicon(兼容旧浏览器) -->
  <link rel="shortcut icon" href="/favicon.ico">

  <!-- Apple Touch Icon(iOS) -->
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">

  <!-- Safari Pinned Tab -->
  <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#0066cc">

  <!-- Web App Manifest(Android/Chrome) -->
  <link rel="manifest" href="/site.webmanifest">

  <!-- 主题色(与品牌色一致) -->
  <meta name="theme-color" content="#0066cc">

  <!-- Windows 磁贴颜色 -->
  <meta name="msapplication-TileColor" content="#0066cc">
  <meta name="msapplication-TileImage" content="/mstile-144x144.png">
</head>
<body>
  <h1>完整的 Favicon 配置</h1>
</body>
</html>

Favicon 文件目录结构 ​

/
├── favicon.svg              # SVG 图标(推荐)
├── favicon.ico              # ICO 图标(兼容旧浏览器)
├── favicon-16x16.png        # 16x16 PNG
├── favicon-32x32.png        # 32x32 PNG
├── favicon-192x192.png      # 192x192 PNG
├── apple-touch-icon.png     # 180x180 PNG
├── apple-touch-icon-152x152.png
├── apple-touch-icon-120x120.png
├── safari-pinned-tab.svg    # Safari 单色 SVG
├── mstile-144x144.png       # Windows 磁贴
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── site.webmanifest         # Web App Manifest
└── browserconfig.xml        # IE/Edge 旧版配置

使用 Favicon 生成工具 ​

推荐使用在线工具来生成全套 favicon:

1. RealFaviconGenerator

2. Favicon.io

  • 网址: https://favicon.io
  • 支持从文字、图片、Emoji 生成 favicon
  • 生成 SVG、ICO、PNG 等格式

3. Maskable.app

使用 JavaScript 检测 favicon 加载 ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Favicon 加载检测</title>
  <link rel="icon" type="image/svg+xml" href="/favicon.svg">
  <style>
    body { font-family: system-ui, sans-serif; max-width: 600px; margin: 40px auto; padding: 0 20px; }
    .favicon-list { display: flex; gap: 20px; align-items: center; margin: 20px 0; }
    .favicon-list img { width: 32px; height: 32px; border: 1px solid #ddd; }
    .status { padding: 10px; border-radius: 4px; margin: 10px 0; }
    .success { background: #d4edda; color: #155724; }
    .error { background: #f8d7da; color: #721c24; }
  </style>
</head>
<body>
  <h1>Favicon 信息</h1>
  <div id="output"></div>

  <script>
    var output = document.getElementById('output');

    // 获取所有 icon link 标签
    var iconLinks = document.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"]');

    if (iconLinks.length === 0) {
      output.innerHTML = '<p>未找到 favicon 配置。</p>';
    } else {
      var html = '<p>共找到 ' + iconLinks.length + ' 个图标配置:</p>';
      iconLinks.forEach(function(link, i) {
        var status = '已配置';
        html += '<div class="status success">';
        html += '<b>' + (i + 1) + '.</b> ';
        html += 'rel="' + link.rel + '" ';
        html += 'href="' + link.href + '" ';
        if (link.sizes) html += 'sizes="' + link.sizes + '" ';
        if (link.type) html += 'type="' + link.type + '" ';
        html += '</div>';
      });
      output.innerHTML = html;
    }

    // 测试默认 favicon.ico 是否存在
    var testImg = new Image();
    testImg.onload = function() {
      output.innerHTML += '<div class="status success">/favicon.ico 存在</div>';
    };
    testImg.onerror = function() {
      output.innerHTML += '<div class="status error">/favicon.ico 不存在(建议添加)</div>';
    };
    testImg.src = '/favicon.ico?' + Date.now();
  </script>
</body>
</html>

注意事项 ​

1. 不支持 SVG 的浏览器 ​

虽然大多数现代浏览器支持 SVG favicon,但一些旧版浏览器不支持。需要提供 PNG 备用:

html
<!-- SVG 优先,PNG 备用 -->
<link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="any">
<link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png">

2. Favicon 缓存问题 ​

Favicon 有很强的缓存策略,更新后可能不会立即生效。解决方法:

  • 更改文件名(如 favicon-v2.ico)
  • 在 URL 后添加查询参数(如 href="/favicon.ico?v=2")
  • 清除浏览器缓存

3. 文件路径 ​

Favicon 文件通常放在网站根目录下。如果放在子目录中,需要使用绝对路径:

html
<!-- 推荐:根目录 -->
<link rel="icon" href="/favicon.svg">

<!-- 也可以:子目录 -->
<link rel="icon" href="/assets/images/favicon.svg">

4. 图标设计建议 ​

  • 简洁:在小尺寸下要清晰可辨
  • 高对比:避免浅色背景上的浅色图标
  • 独特:与品牌形象一致
  • 单色:SVG 图标建议使用单色

最佳实践 ​

1. 使用 SVG + PNG 双格式 ​

html
<link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="any">
<link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png">

2. 提供完整的 Apple Touch Icon ​

html
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">

3. 配置 Web App Manifest ​

html
<link rel="manifest" href="/site.webmanifest">

4. 使用主题色统一风格 ​

html
<meta name="theme-color" content="#0066cc">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#0066cc">

5. 使用自动化工具 ​

在构建流程中集成 favicon 生成工具,确保每次更新时生成所有尺寸。

下一节

继续学习:preload / prefetch / preconnect

参考链接 ​