【问题标题】:Avoid line between tiled SVG shapes避免平铺 SVG 形状之间的线条
【发布时间】:2012-10-14 12:00:21
【问题描述】:

我正在使用多个不同颜色的矩形来构建 SVG 数据可视化。这很好用,但有时背景颜色会在矩形之间渗出。我正在使用 Chrome 浏览器,但其他浏览器似乎也受到了类似的影响。

http://jsfiddle.net/dVEPk/

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <rect x="10.5" y="10" height="100" width="100"
          style="stroke:none; fill: #00cc00"/>
  <rect x="110.5" y="10" height="100" width="100"
          style="stroke:none; fill: #00cc00"/>
</svg>

在 Chrome 中,如果 x 偏移量是整数,则该行不可见。

我确信我可以通过使矩形比它们必须占据的空间大一点来避免线条。但这似乎是一个 hack:是否有 SVG 习惯用法或最佳实践来实现没有“灌浆”的完美平铺形状?

我还担心渲染性能,因为我的可视化可能非常大(比如 100MB XML .svg)。我希望能够给渲染器提示,例如“&lt;g&gt; 中的所有形状都没有重叠”?

【问题讨论】:

    标签: layout svg rendering


    【解决方案1】:

    这是在形状和背景之间起作用的抗锯齿。如果要关闭它,请在形状上设置 shape-rendering="crispEdges"。您可以在 rect 元素或 &lt;svg&gt; 上设置它,在这种情况下 rect 元素将继承它。

    您可以通过向坐标添加 0.5 来调整线的位置。请参阅cairo FAQ 了解更多详情。

    【讨论】:

    • 哇,效果很好...我想缺点是当形状本身大约像素大小或更小时,它们的颜色会混叠。
    • crispEdges 禁用抗锯齿。如果您绘制对角线,您会发现它们看起来比抗锯齿线更粗糙。
    • 难道没有不破坏圆角线所需的抗锯齿的解决方案吗?此解决方案解决了一个问题,同时创建了另一个问题......
    • @matt 恐怕不适用于 SVG 1.1 和当前的浏览器渲染器。您唯一能做的就是通过添加边框或以其他方式使形状重叠来解决此问题。如果形状不透明,这将不起作用。您可以尝试放置一个别名形状来完全填充间隙,但我的经验是,间隙往往会根据放大倍数改变大小。而且,对于直线,您可以尝试只使用精确的像素边界,但同样会在缩放时中断。
    • @trlkly 在 Chrome 中为我工作...?
    猜你喜欢
    • 2012-11-07
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2013-04-11
    相关资源
    最近更新 更多