现代网站中的SVG图标与PNG图标


90

我想知道为什么这么少的现代网站仍然只使用PNG作为图标(但是这种假设只是基于我的观察)。到目前为止,我知道,在SVG上使用PNG的主要原因是IE8,并且SVG使用了更多的CPU能力(但是我不认为对于简单的1K图标来说这不是问题)。我可以看到(现在我们正在使用)使用SVG的许多优点,无论是将其用作精灵,图像还是嵌入式SVG。

寻找研究的问题:PNG Sprite与SVG sprite与Icon字体专注于性能,而没有相关的答案,Icon Font与SVG缓存和网络相关性关注于网络流量,但是可以通过模板轻松解决。)

如果新网站仅支持现代浏览器,是否有任何理由不使用SVG(或-是否有任何理由将PNG用于图标)?如果我们不在乎IE8,并且通过模板化和/或缓存来备份SVG的使用,是否有任何陷阱可以仅依靠SVG?


12
亲爱的投票人,请您告诉我基于此问题的具体观点是什么,我在哪里询问了具体的技术原因?非常感谢您的反馈意见,以便我进一步完善问题。
罗伯特·戈德温2014年

27
罗伯特,这似乎不是基于观点的,但是人们有时会进入僵尸模式,只是略过问题而没有真正阅读它们。
Brigand 2014年

我更喜欢png,以简化操作和简化DOM。要添加到以下答案的一点是,使用svg,您可以动态更改颜色。如果一个图标具有三种颜色:常规,活动和悬停,则为3 png图像,但只有一个svg。
CodeToad

@Robert [ZOMBIE MODE]是个好人:):D
QMaster

Answers:


104

SVG可能是一个不错的选择的原因:

  • 它无缝支持任何大小的浏览器,尤其是使用CSS的浏览器 background-size
  • 您可以按比例放大/缩小它们,例如达到悬停效果
  • 您可以嵌入SVG并使用JavaScript和DOM对其进行实时修改
  • 您可以使用CSS设置SVG和SVG的样式(更改颜色,轮廓等)。
  • 您可以在客户端或服务器上动态生成SVG。由于它们基于文本的性质,因此不需要低级库或功能强大的服务器即可创建它们。

PNG可能是一个不错的选择的原因:

  • 浏览器支持
  • 用于创建PNG Spritesheets的现有工具
  • 大多数人的计算机上都有与PNG兼容的编辑器
  • 您的图形是照片或其他难以向量化的图像

其他问题:

  • 一些SVG编辑器可能会将元数据存储在您的SVG中,从而增加了文件大小,并可能无意间公开了数据
    • 例如,当您在Inkscape中导出PNG时,保存时确实/确实将指向该目录的绝对路径保存在SVG中
    • SVG压缩器可能会删除它,但我尚未对其进行测试(如果有,请随时进行编辑)

谢谢,我们的图形人员在Illustrator中创建了SVG,然后手动对其进行编辑,因此通常<svg>几乎没有元素和属性,所以这些关注是无声的-我的关注是我忽略了一些严重的问题,因为我看到的只有好处在经典的PNG上-但实际上可能归结为<= IE8或> IE8。例如,SVG中带有带加号的圆圈的标准图标比PNG中的紧凑。
罗伯特·戈德温2014年

是的,有些人是从第三方获得SVG的,不要在文本编辑器中打开它们,或者不要确保它们已被压缩。只是不想把它遗漏在外。现在我想到了PNG的问题。通常,无用的数据(在Web上下文中)存储在其中。该数据由编辑器,文件浏览器和其他程序使用。不过,这对于jpeg更为常见(相机商店的品牌,型号,镜头,设置等)。
Brigand

1
谢谢,所以我想在我们的项目中使用SVG确实没有任何不利之处,我们将对其进行更深入的集成。感谢您的见解。
罗伯特·戈德温2014年

图标字体是选择矢量图标的正确方法。对我来说,SVG图标的最大缺点是CSS中的data属性不适用于IE10 / 11。
Gerfried

@Gerfried Icon字体虽然有许多可访问性问题。一旦用户决定阻止Web字体或使用自己的字体替代所有字体(无论出于何种原因),所有这些漂亮的图标都会立即中断。有回退,但我自己还没有看到100%有效的解决方案。SVG图像不是这种情况。
tomasz86 '17

11

SVG很酷(FakeRainBrigand很好地描述了它)并且呈现精美,但是可能非常复杂。当处理矢量数据而不是基于像素的图像时,浏览器有更多工作要做。图像是一个元素,SVG可能有很多子级,当内联使用时,它们甚至可以添加到DOM中。

我没有进行任何有价值的性能测试,但是从逻辑的角度来看,在性能方面,尤其是在处理中年移动浏览器(CPU压力)时,应谨慎使用SVG。拥有一张图表,在不同的Android和IOS设备上可以看到100张SVG图像与100张PNG图像所消耗的CPU电源,这将非常有用...

SVG的另一个令人烦恼的事情是,对于某些Android / Samsung,无论浏览器还是我们的旧版IE,标记都需要一个width和height属性。而且大多数现代SVG编辑器(例如A *** e Illustrator)都只添加了“ viewBox”属性。

关于SVG的最酷的事情是,它在任何像素密度下都呈现出清晰美观的效果。


11

除非您显示非常简单的形状/设计,或者特别需要使用该应用程序修改图形的某些部分,否则使用SVG不会有很多诱因。您可以生成两倍于原始大小的PNG(用于视网膜显示器),而文件大小仍要小一个数量级-更不用说对传统浏览器的更好覆盖了(不需要javascript或polyfill)。

我说这是用矢量图形构建UI的人。这是一个了不起的设计工具,但是对于传递/带宽/覆盖范围而言,很难超越PNG。就在昨晚,我测试了一个著名的徽标。CocaCola.svg接近2万。由于它是纯色/单色,我导出为具有12色调色板压缩的PNG-8,并将其降低到1.6K(!!!)对于几个徽标来说,这没什么大不了的,但是当您必须显示40他们..好吧,你知道了。

最好的部分是,您可以将PNG转换为base64数据uri,并将其直接嵌入样式表中。SVG不建议使用此格式。SVG是一种已因性能和兼容性问题而闻名的格式,尤其是在移动浏览器上。

最后,我必须说两者都有优点和用例,但是PNG取得了很多成就,当您采用最新版本时,您所面临的阻力也较小。对于那些SVG确实更适合的奇怪情况,我强烈推荐这篇文章本学习资源

设计愉快!


海事组织,这是最好的答案。
Marco Demaio

您应该指定使用的可口可乐徽标。从2007年开始的当前徽标非常简单,约为8KB。与PNG-8相比,它什么都没有,但是比20KB好得多。
Caleb Taylor

3

的确,几乎所有地方都使用png。我认为这是因为在大多数情况下,SVG几乎没有用,图像应该更大(我认为),并且每当缩放图像时计算机都必须重新生成图像(因为您总是缩放图像,不是吗? ?)我认为这是最重要的原因。


26
SVG对于图标非常有用,图标在现代(移动)网站中无处不在。它们提供缩放和CSS样式,没有质量损失,这是png所没有的两个重要功能。
user1884155 2014年

从用户的角度来看,这毫无意义,但是作为多媒体开发人员,只使用一个可以在任何屏幕上使用并且始终保持相同质量的文件是很棒的。
sebastian romero

2

让我们注意,性能上的SVG可能变得可怕。即使在现代浏览器上,例如Chrome(写于2019年!),类似CMS的页面也带有几百个svg图标(实际上是3-800个)svg图标,实际上会使浏览器挂起5秒以上才能完成渲染。同时最大化CPU。

如其他地方所述,页面中嵌入的SVG的数量呈指数增加,从而增加了浏览器的负载,因此,如果您碰到这种情况

选项1:将svgs转换为webfont(请参见此处的性能图表:http://frozeman.de/blog/2013/08/why-is-svg-so-slow/ )

选项2:退回到普通的旧PNG

在这样的情况下,您〜根本不想做任何事想做的事,例如即时颜色修改,并且有很多SVG实例,那么旧的PNG可以完成工作并节省时间!


我不这么认为,SVG具有更好的性能。建议阅读以下内容:vecta.io/blog/comparing-svg-and-png-file-sizes
哈里·萨斯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.