svg - 我可以在不使用 z 参数的情况下关闭 SVG 路径吗?

标签 svg svg-path

我可以在我开始的地方完成一条路径吗,它会被认为是关闭的还是Z?必须使用命令吗?

例如,这是

path d="M150 0 L75 200 L225 200 L150 0" stroke="black" fill="none"

和这个一样
path d="M150 0 L75 200 L225 200 Z" stroke="black" fill="none"

或者在第一个和第二个示例中是否有两个点在同一点 (150, 0) 上?

最佳答案

有一点不同。如果路径未闭合,则您很可能会在路径两端相交的拐角处看到丢失的像素。下面是一个例子:

<svg width="360" height="100" viewBox="0 0 360 100">
  <g stroke-width="20" fill="none">
    <path d="m10 10h80v80h-80v-80" stroke="#f00" stroke-linecap="butt" />
    <path d="m130 10h80v80h-80v-80" stroke="#0a0" stroke-linecap="square" />
    <path d="m250 10h80v80h-80z" stroke="#04f" />
  </g>
</svg>

左侧的路径是开放的,由于左上角的两个顶点未连接,您可以看到两个线帽重叠的间隙。这可以通过添加 stroke-linecap="square" 来解决到 svg 标记,但在大多数情况下,使用封闭路径更有意义,如右图所示。
编辑:
对于不希望路径起点和终点之间有直线段的曲线形状,只需将起点和终点放在同一位置即可。如果您的切线在同一方向上对齐,除非您有 stroke-linecap,否则您是否将路径保持打开状态可能无关紧要。设置为 butt ,在这种情况下,末端部分可能会稍微远离路径。例如:

<svg width="160" height="160" viewBox="-80 -80 160 160">
  <path d="M0 70C20 70 0 40 20 20 40 0 70 20 70 0 70-20 40 0 20-20 0-40 20-70 0-70-20-70 0-40-20-20-40 0-70-20-70 0-70 20-40 0-20 20 0 40-20 70 0 70" fill="#fcc" stroke="#f00" stroke-width="20" stroke-linecap="square"/>
</svg>

<svg width="160" height="160" viewBox="-80 -80 160 160">
  <path d="M0 70C20 70 0 40 20 20 40 0 70 20 70 0 70-20 40 0 20-20 0-40 20-70 0-70-20-70 0-40-20-20-40 0-70-20-70 0-70 20-40 0-20 20 0 40-20 70 0 70z" fill="#afa" stroke="#0a0" stroke-width="20" stroke-linecap="square"/>
</svg>

如果仔细观察,您可以看到红色形状底部的线条帽相互延伸出一些轻微的块状。绿色形状具有封闭曲线,因此无需担心线帽。

■ 附录:
几天后刚刚回到此页面,看起来 Chrome 已在此期间更新(目前在 OS X 上使用 Chrome 版本 53.0.2785.116/64 位)。现在看来,如果起点和终点在很小的误差范围内重合,则开放路径会自动关闭。
这是第一个图形,但有三个开放路径,其中起点和终点分别以 0.1px、0.001px 和 0.00001px 分隔(从左到右):

<svg width="360" height="100" viewBox="0 0 360 100">
  <g stroke-width="20" fill="none">
    <path d="m10 10h80v80h-80v-79.99" stroke="#f00" stroke-linecap="butt" />
    <path d="m130 10h80v80h-80v-79.9999" stroke="#0a0" stroke-linecap="butt" />
    <path d="m250 10h80v80h-80v-79.999999" stroke="#04f" stroke-linecap="butt" />
  </g>
</svg>

我不确定我是否同意这种行为。它可能会导致动画路径出现故障:

<svg width="120" height="120" viewBox="0 0 120 120">
<path id="p" d="M10 10 110 10 110 110 10 110 10 10" stroke="#f00" fill="none" stroke-width="20" />
<animate xlink:href="#p" attributeName="d" attributeType="XML" from="M9.99999 9.99999 110 10 110 110 10 110 10 10" to="M10.00001 10.00001 110 10 110 110 10 110 10 10" dur="1s" fill="freeze" repeatCount="indefinite" />
</svg>

关于svg - 我可以在不使用 z 参数的情况下关闭 SVG 路径吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39580378/

相关文章:

javascript - Jquery 与 css 的悬停不同

css - 如何使 div 的黑色背景可见?

javascript - html2canvas 生成的图像未在图表中选择 svg

javascript - 使用javascript修改svg文件

python - 你能在 python 程序中显示图像吗(不使用 pygame)?

python - 如何从 svgpathtools 贝塞尔曲线获取坐标列表?

javascript - 如何使 svg 路径填充为进行中的动画?

javascript - D3 弧形端部人字形