【发布时间】:2019-05-29 23:27:06
【问题描述】:
在基于 Webkit 和 Blink 的浏览器中,SVG 无法正确平铺。不同缩放级别的图像之间有一个空间。 StackOverflow 上有许多主题解决了这个问题,都标记为已解决,但这些人一定没有对他们的解决方案进行足够彻底的测试。
我的 SVG 是完全偶数像素 (130 x 24)。 他们将背景大小设置为 130px 24px。 它们设置为 preserveAspectRatio="none"。 SVG 边缘的空白区域绝对为零。
然而,虽然它在 100% 时看起来不错,但如果放大到正确的级别,SVG 之间仍然会有很薄的空间。
鉴于使用 SVG 作为背景的广泛建议,让我感到惊讶的是,这个错误以前从未被报告过。
这是确切的 SVG:
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 130 24" xml:space="preserve" preserveAspectRatio="none">
<style type="text/css">
.st0{fill:#A5EF8B;}
</style>
<path class="st0" d="M0,12c32.5,0,32.5,12,65,12s32.5-12,65-12V0C97.5,0,92.9,12,65,12C32.5,12,20.7,0,0,0"/>
</svg>
我也可以使用其他 SVG 来确认这种行为,例如 https://www.heropatterns.com/ 上的那些
用于测试的代码笔:https://codepen.io/TelFiRE/pen/gJzqaG
图像之间的间距通常小于 1 像素(意味着线条只是较浅的绿色阴影)。这很微妙,如果你的显示器很暗,可能很难看出。
在提出这个问题时,我希望了解为什么它会以一种让我制作大量重复的 SVG 背景而不会出现问题的方式发生。这不仅仅是一张图片,所以我想尽可能避免使用骇人听闻的解决方案/解决方法。例如,从边缘切掉 2 个像素可以修复 99% 的问题,但不能完全修复,这让我想知道如果我真的需要这两个像素我会怎么做。这个特殊的 SVG 看起来还不错,但更复杂的模式会失去对齐。
【问题讨论】:
-
第一:你能展示一下你如何设置背景的 CSS 吗?第二:尝试扩展您的路径,使其比您的 viewBox 宽一点。即从-1开始到131。
-
它被设置为 SVG 的背景 URL。将机翼向两侧展开并不能解决问题,也只会将文件大小增加 30%(比 PNG 大),所以即使它有效,也不是解决方案,不幸的是。
-
我在原始问题中添加了一个 Codepen。我最初尝试过,但找不到长期的 SVG 主机。没有考虑 url 编码,感谢 enxaneta 的想法。
-
如果您对创建形状的 CSS 解决方案感兴趣:stackoverflow.com/q/56199721/8620333 .. 不如 SVG 完美,但易于处理
-
这是一个很酷的提示。具有讽刺意味的是,其中一些具有非常相似的问题,即在某些缩放级别出现水平线。我认为它可能无关紧要,并且可以修复。无论哪种情况,感谢分享!