我在Chrome/Chromium中的SVG渲染有一个疯狂的问题(Firefox按预期工作)。
我想渲染一个空填充的圆,但包含模板的笔划,但由于某种原因,一旦我尝试更改屏幕分辨率,圆笔划开始被切断,主要是在底部/右边缘。我不知道为什么会这样。我想知道我应该做些什么来防止中风被削减,任何帮助都欢迎
UPD我不关心IE和其他过时的浏览器。只是现代的
复制链接:https://jsfiddle.net/k8cbq4dv/
随附屏幕截图x1c 0d1x
代码本身:
<div id="root">
<svg width="100%" viewBox="0 0 40 40" style="background-color: rgb(204, 255, 204);">
<defs>
<pattern id="greenglaze" patternUnits="userSpaceOnUse" width="5" height="5">
<image href="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSyiQU4yEPR1SIEF1mRiFOP1IMFoQ4s8y0vGJTRhRt4CbE4BaOuFEXrwEDWmI8ngIzbk_c&usqp=CAU" width="5" height="5" preserveAspectRatio="none"></image>
</pattern>
</defs>
<circle cx="20" cy="20" r="12.91549430918954" fill="transparent" transform-origin="center" stroke="url(#greenglaze)" stroke-width="7.9" stroke-dasharray="100 0" stroke-dashoffset="-0" transform="rotate(-90, 0, 0)"></circle>
</svg>
</div>
3条答案
按热度按时间tquggr8v1#
这只是一个怀疑,所以答案可能仍然是不正确的。至少对我来说,jsFiddle错误确实消失了。
这可能是因为Chromium在识别最终图形的边界框方面存在问题,因为它必须考虑笔划的宽度。如果它在这一点上计算错误,它可能会决定一些重复的模式将永远在有效的剪辑路径之外,只是不渲染它们。
解决方案是不使用笔划宽度,而是绘制两个组合的圆形路径:
vdgimpew2#
我迟到了,但经过一段时间的检查。据了解,您的
circle
正在您的“甜甜圈”上进行“切割”。因为你的
image
被设置为preserveAspectRatio="none"
,它将根据窗口大小调整内容的大小,并触发在图像的侧面剪切。也许这可能有帮助,但在 *
circle
* 中使用**stroke-miterlimit
**可以解决这个问题。ufj5ltwl3#
前面的代码并没有真正解决这个问题。
我的英语不是最好的。
我在这里做了几个测试,我认为解决方案是使用css。