使用stroke-dasharray在Safari中进行SVG渲染

时间:2015-12-08 15:40:37

标签: css svg safari rendering stroke-dasharray

我在Safari中遇到了一个奇怪的渲染SVG问题。我有一个像圆形装载器一样的笔画动画圆圈,但由于某种原因,只要我添加stroke-dashoffset或stroke-dasharray,渲染就会关闭。

gif供参考:

ref circle http://askenielsen.dk/korrektur/refCircleRender.gif

一旦应用了其中一种样式,渲染就会变得更加锯齿状。

看起来并不多,但是不止一个圈子变得非常明显:

Multiple circles http://askenielsen.dk/korrektur/refCircles.gif

在视网膜显示器或IE,Firefox,Chrome等Safari中看起来很好。

圆圈缩放或笔触宽度不会改变问题,在两种浏览器中都不会。

SVG

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 134 134" enable-background="new 0 0 134 134" xml:space="preserve" width="134px" height="134px">   
    <path class="circle" d="M67,6c33.7,0,61,27.3,61,61c0,33.7-27.3,61-61,61c-33.7,0-61-27.3-61-61C6,33.3,33.3,6,67,6"/>
    <path class="circle" d="M67,13c29.8,0,54,24.2,54,54s-24.2,54-54,54S13,96.8,13,67S37.2,13,67,13"/>
    <path class="circle" d="M67,20c26,0,47,21,47,47s-21,47-47,47S20,93,20,67S41,20,67,20"/>         
</svg>

CSS

.circle {
    fill: none;
    stroke: red;
    stroke-width: 4px;
    /* THE STYLE THAT MESSES UP THE RENDERING */
    stroke-dasharray: 200px, 200px;
}

你可以test it here

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试添加值shape-rendering

geometricPrecision
circle {
    shape-rendering: geometricPrecision;
}

https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering

  • 自动 表示用户代理应进行适当的权衡以平衡速度,清晰边缘和几何精度,但几何精度比速度和边缘更重要。
  • optimizeSpeed 表示用户代理应强调渲染速度超过几何精度和清晰边缘。此选项有时会导致用户代理关闭形状消除锯齿。
  • crispEdges 表示用户代理应尝试强调图稿的干净边缘与渲染速度和几何精度之间的对比度。为了实现清晰的边缘,用户代理可能会关闭所有线条和曲线的抗锯齿,或者可能只关闭接近垂直或水平的直线。此外,用户代理可能会调整线条位置和线宽以使边缘与设备像素对齐。
  • geometricPrecision 表示用户代理应强调速度和边缘清晰的几何精度。

以下SVG形状元素可以使用shape-rendering

<circle><ellipse><line><path><polygon><polyline><rect>

您可以使用CSS shape-rendering属性控制抗锯齿的使用。将此属性设置为crispEdges(在元素或SVG上作为一个整体)将关闭消除锯齿,从而产生清晰(如果有时是锯齿状)的线条。值geometricPrecision将强调平滑边缘。