15: SVG 图标系统 – Defs 放哪里

一旦我们有了我们所谓的 SVG 的“defs 块”——定义了我们稍后想要绘制的所有内容的那一部分 SVG——我们把它放在哪里?到目前为止,我们一直将其直接放入 HTML 中,这样做绝对有效。如果我们将其放在页面顶部,比如在打开的 <body> 标签之后

</head>

<body>

   <!-- include svg defs here -->

这在所有支持 SVG 的浏览器中都能很好地工作。

将它向下移动可能会很诱人。也许图标对页面来说不是那么重要,不如页面要传递的真正内容那么重要,因此我们将图标移到页面的底部,就像我们经常对 JavaScript 做的那样延迟加载它们。我们在视频中尝试了这种方法,但在 Safari 中渲染我们稍后尝试 <use> 的图标时遇到了问题。老实说,我在其他浏览器中也看到过这种方法的不同类型的行为不一致,而且似乎这方面的情况正在发生一些变化。所以我有听说过:<use> 很难实现。如果你最终将 defs 保留在你的文档中,最好将该块放在顶部。

在这个视频中,我们查看了所有这些的一些基本测试,然后查看了一些使用此系统的真实网站,以及它们如何以及在何处插入 svg defs 块。

查看 Chris Coyier 在 CodePen 上的笔 954e71cb5d5e79fb61d3c89bb3f21b8a@chriscoyier)。

注意

我喜欢“SVG defs 块”这个术语——这样我们就可以称它为具有特定目的但实际上没有官方名称的东西。但是,你并不总是需要实际使用 <defs> 标签。当你使用 <symbol> 时,它们本身不会渲染,而且我确实认为不应该放在 <defs> 中。我听说过 SVG 中渐变的定义也是一样的,如果它们在 <defs> 中甚至不起作用。无论如何,它仍然是一个“我们只是定义以便稍后使用的 SVG 代码块”,所以我可能会继续称之为“SVG defs 块”。