css - 使用Stroke-dasharray 在 Safari 中渲染 SVG

标签 css svg safari rendering stroke-dasharray

我在 Safari 中遇到了 SVG 奇怪的渲染问题。我有一个带有笔划动画的圆圈,就像圆形加载器一样,但由于某种原因,一旦我添加笔画短划线偏移量或笔划短划线数组,渲染就会关闭。

gif供引用:

ref circle
(来源:askenielsen.dk)

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

看起来不多,但是当有多个圆圈时,它就变得非常明显:

Multiple circles
(来源:askenielsen.dk)

在视网膜显示屏上的 Safari 或 IE、Firefox、Chrome 等中看起来不错。

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

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 .

有什么想法吗?

最佳答案

您可以尝试添加shape-rendering值为geometricPrecision

circle {
    shape-rendering: geometricPrecision;
}

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

  • 自动 指示用户代理应做出适当的权衡,以平衡速度、清晰边缘和几何精度,但几何精度比速度和清晰边缘更重要。
  • 优化速度 指示用户代理应强调渲染速度而不是几何精度和清晰边缘。此选项有时会导致用户代理关闭形状抗锯齿。
  • 边缘清晰 指示用户代理应尝试强调图稿的干净边缘与渲染速度和几何精度之间的对比度。为了获得清晰的边缘,用户代理可能会关闭所有直线和曲线的抗锯齿功能,或者可能仅关闭接近垂直或水平的直线的抗锯齿功能。此外,用户代理可能会调整线条位置和线条宽度,以使边缘与设备像素对齐。
  • 几何精度 指示用户代理应强调几何精度而不是速度和清晰的边缘。

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

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

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

关于css - 使用Stroke-dasharray 在 Safari 中渲染 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34159973/

相关文章:

javascript - iOS Safari 随机调整大小和滚动问题

php - 无法从 Html5 CSS 和 php 表单获取信息

jquery - 通过点击 div 触发 radio

html - 单元格边框扩展总表的宽度

html - 绝对定位的 DIV 内部的 SVG 绘图区域缩小

javascript - 如何使用 Snap.svg 选择现有 SVG 的片段

javascript - 用数组数据绘制圆弧

iPhone 上 Chrome 的 CSS 标签/媒体查询

javascript - ajax跨源请求在 safari 中不起作用,但在 chrome 和 firefox 中起作用

javascript - 检测浏览器支持显示 :inline-block