如何以SVG形状拉伸图像以填充其边界?

时间:2013-12-18 13:55:27

标签: html css svg

我有一个充满图像的SVG形状(平行四边形)。演示可以是seen here

SVG对象是:

<svg style="overflow:visible; margin-left:111px; margin-top:22px; " height="86" width="281">
    <defs>
        <pattern id="blip1" patternUnits="userSpaceOnUse" width="279" height="83">
            <image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://i.imgur.com/uTDpE6J.jpg" width="279" height="83"></image>
        </pattern>
    </defs>
    <polygon points="49,2 280,2 232,84 1,84" x="1" y="1" style="stroke-linejoin:round; fill:url(#blip1); stroke-width:2; stroke:hsl(212,45%,26%); "></polygon>
</svg>

但是图像没有被拉伸到形状的边界,而是位于形状的中间。

我想要实现的目标是:

Desired result

但我得到的是:

Actual result

有人能建议我适用于所有形状的解决方案(即五边形,六角形,星形等)吗?顺便说一下,椭圆已经可以正常工作了。

1 个答案:

答案 0 :(得分:13)

preserverAspectRatio=none添加到图像对象并将宽度/高度设置为100%似乎可以执行您想要的操作。 Updated fiddle

<svg style="overflow:visible; margin-left:111px; margin-top:22px; " height="86" width="281">

    <defs>
        <pattern id="blip1" patternUnits="userSpaceOnUse" width="279" height="83">
             <image preserveAspectRatio="none" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://i.imgur.com/uTDpE6J.jpg" width="279" height="83"></image>
        </pattern>
    </defs>

    <polygon points="49,2 280,2 232,84 1,84" x="1" y="1" style="stroke-linejoin:round; fill:url(#blip1); stroke-width:2; stroke:hsl(212,45%,26%); ">
    </polygon>

</svg>