避免在 SVG 中剪切符号

Posted

技术标签:

【中文标题】避免在 SVG 中剪切符号【英文标题】:Avoiding the clipping of symbols in SVG 【发布时间】:2013-11-14 15:22:06 【问题描述】:

对于我的使用来说,将 SVG symbols 列表以零为中心对我来说会很方便,这使得它们在 use 中的位置更容易。例如,一个简单的圆形符号的中心为零,然后是给定的半径。但是,使用标准剪裁会剪掉 3/4 的圆。这是一个例子:

<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     version="1.1"   preserveAspectRatio="xMidYMid meet"
     viewBox="0.0 0.0 230.0 150.0">
    <rect x="0.0" y="0.0"   style="stroke:#000000; stroke-width:0.5 ; fill:#B9FFFF;"/>
    <symbol id="concentric">
        <circle cx="0.0" cy="0.0" r="10.0" style="stroke:#FF0000; stroke-width:0.266; fill:none"/>
        <circle cx="0.0" cy="0.0" r="5.0" style="stroke:#00FF00; stroke-width:0.266; fill:none"/>
    </symbol>   
    <use xlink:href="#concentric" x="20" y="20" />
    <use xlink:href="#concentric" x="40" y="20" />
    <use xlink:href="#concentric" x="60" y="20" />
</svg>

这将导致符号“同心”的三种用途,但由于原始符号在 0,0 处有两个圆,因此四分之三的符号被剪裁。

不将符号剪裁在 0 0 处的最简单方法是什么?

【问题讨论】:

【参考方案1】:

如果你不想剪裁,你可以使用overflow="visible" 来关闭它。

<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     version="1.1"   preserveAspectRatio="xMidYMid meet"
     viewBox="0.0 0.0 230.0 150.0">
    <rect x="0.0" y="0.0"   style="stroke:#000000; stroke-width:0.5 ; fill:#B9FFFF;"/>
    <symbol id="concentric" overflow="visible">
        <circle cx="0.0" cy="0.0" r="10.0" style="stroke:#FF0000; stroke-width:0.266; fill:none"/>
        <circle cx="0.0" cy="0.0" r="5.0" style="stroke:#00FF00; stroke-width:0.266; fill:none"/>
    </symbol>   
    <use xlink:href="#concentric" x="20" y="20" />
    <use xlink:href="#concentric" x="40" y="20" />
    <use xlink:href="#concentric" x="60" y="20" />
</svg>

【讨论】:

令人惊讶的是,我在几秒钟前通过粗略的实验发现了这一点。虽然很高兴让专家确认解决方案,但非常感谢! 我刚刚注意到你的解决方案和我的不同。这些是否相同:overflow="visible 和 overflow:"visible ? SVG 将许多属性映射到样式,因此它们几乎相同,只是具有不同的 CSS 特异性,这不会影响此用例。

以上是关于避免在 SVG 中剪切符号的主要内容,如果未能解决你的问题,请参考以下文章

使用 onclick 使 svg 图像对象可点击,避免绝对定位

如何避免使用 ggtern/ggplot2 剪切标签(如 xpd=TRUE)

如何在打字稿中避免这种符号“| undefined”?

如何避免 GDB 中符号的命名空间前缀?

如何在svg中剪切图像

避免从 Linux 上的可执行文件中导出符号