【发布时间】:2017-06-29 09:09:24
【问题描述】:
我知道如何在我的网站上加载 SVG 图标,但我不知道如何满足以下所有限制:
- 能够在 CSS 中使用 SVG 图标
- 没有丢失图标的闪烁 (FOMI)
- 最小初始页面大小
- 缓存的 SVG
- 能够使用 CDN
- 必须能够使用
fill: currentColor使图标与当前文本颜色匹配,就像icon-fonts 一样 - 奖励:Pixel-align the SVGs 所以它们总是看起来很锋利
1,2,3 和 4 可以通过使用外部精灵图来满足,如下所示:
<svg viewBox="0 0 100 100">
<use xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="/assets/sprite-4faa5ef477.svg#icon-asterisk-50af6"></use>
</svg>
但在浏览器修复 CORS issue 之前,我们不能使用 CDN。
我们可以patch in 支持外部域,但我很确定这不适用于 CSS,因为它只监视 DOM(抱歉,尚未测试),而且它还会导致您的浏览器对无法获取的文件的一大堆失败请求(页面上的每个图标一个)。
如果我们内联整个 SVG(增加页面大小,无缓存)或 AJAX(导致 FOMI),我们可以使用 CDN。
那么,有没有满足所有5 7 个约束的解决方案?
基本上,我希望 SVG 和图标字体一样方便,否则切换是没有意义的。 SVG 支持多种颜色并且更易于访问,但我无法让它们看起来一样好,或者加载效率不高。
【问题讨论】:
-
你可以把你的 SVG 变成图标字体fontello.com
-
@HolgerWill 是的。我目前正在使用带有 icomoon 的图标字体,但每个人都在说 SVG 近来风靡一时,我正试图弄清楚它们到底有多好。当然,它们支持多种颜色,但是they don't look as crisp 并且它们不适用于 CDN,所以现在 SVG 看起来有点糟糕。因为FontCustom 似乎已经死了,所以使用 webpack 构建它们会更容易一些。
-
我猜想 Polymer 所做的事情...把你的图标放在一个 html 文件中,并结合自定义元素使用 html-includes,也许
标签: html css ajax performance svg