SVG缩放和剪辑路径



我正在与SVG剪辑路径缩放行为作斗争。我想缩放剪辑路径以适应它所应用的元素大小。我一直在读关于剪辑路径单位的文章,但我无法做到这一点。

以下是我尝试在不进行任何缩放的情况下进行操作的示例:http://jsfiddle.net/1196o7n0/1/

和SVG(主形状和剪辑路径形状完全相同):

<svg width="800" height="600"  xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
  <clipPath id="svgPath">
        <circle r="40" cy="50" cx="50" />
        <circle r="74.576" cy="235" cx="193.949" />
        <circle r="47.034" cy="108.305" cx="426.576" />
        <circle r="43.644" cy="255.763" cx="346.915" />
        <circle r="35.17" cy="82.882" cx="255.39" />
  </clipPath>
  <g fill="#000">
    <circle r="40" cy="50" cx="50" />
    <circle r="74.576" cy="235" cx="193.949" />
    <circle r="47.034" cy="108.305" cx="426.576" />
    <circle r="43.644" cy="255.763" cx="346.915" />
    <circle r="35.17" cy="82.882" cx="255.39" />
  </g>
</svg>

现在,如果我定义了一个视图框,并使SVG缩放以适应文档的宽度和高度,那么剪辑路径似乎不会缩放:http://jsfiddle.net/1196o7n0/2/

你知道我该怎么做吗?我是不是错过了什么?

要缩放剪辑路径以适应要应用它的元素,需要将clipPathUnits="objectBoundingBox"添加到clippath元素中。

下面是一个JsFiddle,它基于您的示例来演示如何做到这一点。

<svg width="0" height="0" >
    <defs>
        <clipPath id="svgPath" clipPathUnits="objectBoundingBox">
            <circle r="0.05" cy="0.0625" cx="0.1625" />
            <circle r="0.09322" cy="0.29375" cx="0.2424" /> 
            <!-- rest of path here-->
        </clipPath>
    </defs>
</svg>
<div class="content centered">
    <div class="clipped"></div>
</div>

捕获器是路径的单位必须是0到1之间的十进制数字;这些表示对应元素的宽度或高度的分数。

clipPath以绝对单位(像素)定义。如果它被应用到SVG中的某个东西,它就会被缩放。但HTML方面并不知道这一点。它只是应用定义的clipPath。

最新更新