构建自适应网站图标

关于如何构建自适应网站图标的基本概览。

在这篇博文中,我想与大家分享关于如何使用 SVG 构建自适应网站图标的想法。试用演示

显示会根据 MacOS 系统浅色和深色主题变化进行调整的浏览器标签页。 试用演示版

如果你更喜欢视频,可以参考本博文的 YouTube 版本:

概览

自定义网站图标是完善 Web 项目的好方法。它会显示在桌面浏览器标签页中,还会显示在“保存以供日后阅读”读者中、链接到您网站的其他博文中等。一直以来,可通过 .ico 文件类型完成此操作,但最近浏览器允许使用 SVG(一种矢量格式)。您可以使用渐进式增强功能提供受支持的 .ico 网站图标,并升级到 .svg(如果有)。

SVG 能够进行缩放而不会有质量损失,并且其大小可能非常小,但还可以嵌入 CSS,甚至是嵌入式媒体查询。这意味着,如果阅读器应用或书签栏中使用了 SVG 网站图标,那么由于 SVG 内提供了深色偏好设置样式,用户可能会获得与主题相关的(浅色或深色)图标。然后,SVG 会利用其嵌入式样式适应浅色和深色用户偏好。

较大且易于区分的浅色和深色网站图标示例。

每个浏览器中的浅色标签页和深色标签页从上到下提供自适应图标的概览:Safari、Firefox、Chrome。
每个浏览器中的浅色标签页和深色标签页从上到下提供自适应图标的概览:Safari、Firefox、Chrome。

Markup

SVG 标记是使用 .svg 文件类型扩展名的 XML,允许其存储更多动态类型的代码。

首先,让favicon.svg

创建一个名为 favicon.svg 的新文件,并添加以下代码:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">

</svg>

这是我的 SVG 文件,我已根据我的艺术作品调整了 viewBox 的大小:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">

</svg>

添加形状和路径

接下来,添加 SVG 路径代码。这通常意味着在代码编辑器中打开 SVG,但该代码通常不太人性化。这里有一份实用的指南,可指导您从设计工具中导出和优化 SVG

GUI 挑战的海报图片来自在 Adobe Illustrator 中制作的设计师。我对其进行了大量优化我通过 SVGOMG 进行了一些测试,然后手动修改了这些杂物。

以下是我的 skull 图片路径组清理后生成的示例:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <g id="skull">
    <path id="skull-outline" class="favicon-stroke" stroke-linejoin="round" d="M19.62 188.39A166.62 166.62 0 0 1 186.24 21.77c115.25 0 166.61 74.59 166.61 166.62 0 1.83-.08 3.64-.13 5.46h.13s.68 175.09.68 178.65c0 30.11-16.26 41.67-36.32 41.67-12.7 0-35.22-3.93-36.22-32.69h-.2c-1 28.76-16.81 32.69-36.22 32.69-18 0-32.87-6.78-35.77-32.53-2.9 25.75-17.8 32.53-35.8 32.53-20.06 0-36.32-11.56-36.32-41.67 0-2.48.36-24.88.36-24.88A166.68 166.68 0 0 1 19.62 188.39Z" />
    <path id="eyes-and-nose" d="M180.77 205.76c0 23.64 12.84 42.81 28.68 42.81s28.68-19.17 28.68-42.81-12.84-42.82-28.68-42.82-28.68 19.17-28.68 42.82M275 205.76c0 23.64 12.84 42.81 28.68 42.81s28.68-19.17 28.68-42.81-12.84-42.82-28.68-42.82S275 182.11 275 205.76M264.51 276.85s-29.26 43.53-20.12 49.23c7.07 4.41 20.49-16.71 20.49-16.71s12.82 22.58 16.76 20c16.24-10.71-17.13-52.5-17.13-52.5"/>
    <path id="jawline" class="favicon-stroke" fill="none" stroke-linecap="round" d="M114.92 284.33c22.54-1 22 7 22 62.48" />
  </g>
</svg>

请注意直观易懂的 ID 选择器(如 #eyes-and-nose)和(如 .favicon-stroke)。这些内容来自我手边的编辑,准备使用 CSS。 无需添加类和 ID,即可让 SVG 成为自适应网站图标。

在 HTML 的 <head> 标记中的 .ico 网站图标后面,添加以下代码:

<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">

由于新图标可能看起来与 .ico 版本相同,因此请验证它是否正在使用。打开开发者工具的“Network”面板。您可以按图片过滤并搜索网站图标:

开发者工具中的 Network 窗格的屏幕截图,其中突出显示了用于搜索网站图标的过滤器和 favicon.svg 资源。

风格

与 HTML 一样,您可以向标记添加 <style> 标记,以针对相应文档范围使用:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    
  </style>
  …
</svg>

浅色主题版本将是我的网站图标 SVG 的默认颜色。我编写的样式主要是描边颜色和填充颜色:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    .favicon-stroke {
      stroke-width: 8px;
      stroke: #8929ff;
    }
    #skull-outline { fill: white }
    #eyes-and-nose, #hat-outline { fill: #8929ff }
    #hat-fill, #hat-bill { fill: #e662e6 }
  </style>
  …
</svg>

浅色主题网站图标预览示例。

接下来,最有趣的部分是设置网站图标深色主题版本的样式。针对该样式的样式将纳入样式标记内的媒体查询中:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    …
    @media (prefers-color-scheme: dark) {
      /* dark theme styles */
    }
  </style>
  …
</svg>

开发者工具的屏幕截图,其中显示了深色主题媒体查询覆盖了 SVG 眼睛和鼻子的填充颜色。

我的最终结果是这样的:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    …
    @media (prefers-color-scheme: dark) {
      .favicon-stroke { stroke: #343a40 }
      #skull-outline { fill: #adb5bd }
      #hat-outline { fill: #343a40 }
      #eyes-and-nose { fill: #343a40 }
    }
  </style>
  …
</svg>

深色主题网站图标预览示例。

我选择了将亮紫色边框换成漂亮的深灰色 (#343a40),将骷髅头颜色从白色改为浅冷灰色 (#adb5bd),但保留了粉色强调帽子。

浅色和深色网站图标并排预览。

总结

现在你已经知道我是怎么做的,希望你怎么办 ‽ 🙂?

下面,我们就来介绍一下我们的方法多样化,并了解在 Web 上构建网站的所有方法。 只需创建一个演示,点击 tweet me 链接,我就会将其添加到下方的“社区混剪”部分中!

社区混剪作品