SVG 画板大小有两种不同的(合理的)方法。
这里的“画板”指的是 Illustrator 中的概念,基本上是您用于文档的白色绘图区域。 最终它指的是实际 SVG 输出中的 viewBox
。 对于前端开发人员来说,这一点非常重要,因为如果缺少一致性,SVG 的定位将永远是一场小规模的战斗,并且会严重损害 SVG 作为有用系统的理念。
我最近在一次会议上遇到了开发者 Emma Arce,她转述了她的团队在试图标准化某些内容并使其正确时进行的一段非常有趣的对话。 这是我对这种情况的看法。
方法 #1:使它们完全相同的大小
您可能会通过 CSS 应用大小调整,因此画板的大小并不重要,但尺寸应该相同。 这就是它的样子

优点
相对大小。 您在图标设计本身中控制图标相对于其他图标的大小。 因此,如果您稍后在 CSS 中将它们全部调整为相同的大小,所有图标都将保持该大小关系,并且看起来很好。

缺点
方向对齐。 由于任何给定图标的任何一侧都有任意数量的空白,因此很难将事物与图标边缘对齐或期望图标与相邻元素之间有始终一致的空间。

方法 #2:裁剪到边缘
同样,实际的“画板大小”并不重要,因为您很可能仍然会通过 CSS 应用大小调整,但画板应该在所有侧边都与艺术作品的边缘相接。 在 Illustrator 中,这是一个简单的操作

这就是它的样子

优点
对齐和定位。 如果您想将图标放置在元素的右上角,它将移到那里并看起来很好对齐。 不会有一些奇怪的任意数量的空白来进行补偿。

缺点
大小不一致。 现在所有图标都具有不同的纵横比。 这对于复杂性来说不是一个大问题,因为您仍然可以使用具有固定宽度/高度的 CSS 来调整它们的大小,并且它们将在该区域内居中(假设默认 preserveAspectRatio
)。 但是,这会影响它们的大小。 任何给定图标的纵横比越接近正方形,它看起来就越大(它将填满给定的空间)。 更高或更宽的图标需要缩小以适应空间,并且看起来更小。 因此,一致的大小和其他图标的相对大小变得更加困难。

获胜者?
我担心我不能选择一个。 我非常喜欢裁剪图标的定位一致性,但大小不一致可能会让我发疯。 当然,如果我改变了,它会产生完全相反的效果。
其他注意事项
通过框实现一致性: 如果在使用 SVG 的每个实例中,您都将图标放置在一个视觉上定义的框中,则对齐将不再是问题,因为您可以对齐框,并且它们看起来很好。

您始终可以进行一次性操作: 假设您有一个非常长而细的箭头形状。 您始终可以对该特定箭头进行一些特殊 CSS。 我不会因为少数异常值而改变整个系统。 这是关于整个系统的。
我个人使用精确的大小。 当您拥有大量的图标库时,它作为工作流程要容易得多,但更重要的是,我宁愿解决分配问题,而不是试图维护所有可能的视窗大小。
另一个好处是,一次性操作更容易。 我发现对徽标裁剪画板绝对是最好的方法。
Siri,提醒我下次校对我的帖子。
是否有一种方法可以将多个 SVG 组合成类似“精灵”的东西,以便您只需要对所有图标进行一次 HTTP 请求。
如果是这样,您将如何处理? 您如何确定哪个图标显示在哪里? 谢谢。
SVG 精灵很棒……尽管它们并不完全像您通常用于 jpg 和 png 的精灵。
http://lmgtfy.com/?q=svg+sprites
虽然可以实现,但浏览器对某些精灵技术和用例的支持不足。 我喜欢这篇文章中详细介绍的 :target 方法 SitePoint 关于 SVG 精灵的文章,但在某些浏览器中遇到了支持问题,尤其是如果它用在 CSS 背景中。 Chris 发布了 关于支持的一些好的注意事项,您可能需要阅读。
我强烈建议使用 Sketch 3 用于 SVG(实际上,所有 Web 设计需求)……它使处理 SVG 变得轻松,您也不必使用 Illustrator 这样的重量级工具。
仅供参考! 感谢您一如既往地发布文章!
如果图形周围的始终一致的空白是设计考虑因素(例如,在品牌指南中),则画板可能会有所帮助。
有时我认为我只需要将所有内容都设置为 256×256,并使其紧贴边缘。 然后记住我可以使用 CSS 适当地缩放它们,并让我的填充或其他任何东西来处理其余部分。
如果您只使用已建立的标准,您会知道大小是相对于屏幕的,对于高清显示器,它为 1920×1080。
顺便说一句,Chris;svgdesign.guru 是一个 URL
很棒的文章,感谢 Chris! 我的团队和我们决定将我们的图像分成两类:图标和符号。 对于图标,我们计划使用 100 x 100 像素的画板,对于其他所有内容(符号),我们将裁剪艺术作品到其边缘。 这不是一个完美的解决方案,但我认为它是目前最好的解决方案。
一个随意的规则,但我将确定项目是否将包含更多比例一致的(可能是正方形,但实际上是指一致的)图标,还是比例不一致的图标。 如果大多数图标是规则的,那么强制执行一致的大小是有意义的,因为您将有更少的异常需要处理,并且一致性是有帮助的。 同样,如果大多数图标是不规则的,那么为什么要强加一个您会不断反对的约束呢。
大多数网站可能会有比例一致的正方形图标,因此我们可以通过少量遮罩来处理异常情况。
很棒的文章,Chris! 似乎多种方法的组合可能是解决方案,因为没有一种方法适合所有情况。 就像 Emma 在上面提到的那样:根据 SVG 的功能对它们进行分组,并为每个组调整您的方法。
非常有见地的文章!
如果你真的想能够在匹配大小和纵横比的图标和仅需足够大的图标之间来回切换,以便嵌入到自然文本流中,你可以使用嵌套的 <symbol> 元素。内部符号将被裁剪到图形尺寸,但随后它可以用 <use> 放置到另一个具有标准视窗纵横比的符号中。
当然,如果你想要其他行为而不是在两个方向上在 SVG 中居中,你可以分别在两种类型的符号上指定
preserveAspectRatio
值。为了在 Illustrator 中实际实现这些,你需要使用裁剪到适合画板的技术来生成“原始”视窗,然后在 XML 编辑器中工作以定位和调整标准版本的尺寸。
附注:Chris,你什么时候会修复 Markdown 解析器与代码清理程序之间的冲突?在纯 HTML 中编写代码太烦人了……
我认为我第一次是在 Google 的旧版 Android 图标指南中看到它,但我认为有一种方法涉及表面积和视觉重心。
Google 的当前指南在这里,但似乎不再讨论这个主题:https://developer.android.com.cn/design/style/iconography.html
我猜它对 Android 不起作用,但作为一个新手设计师,我不完全理解视觉重心方法的好处。/耸肩