50

我正在尝试拥有一个可以轻松调整大小的流体 SVG 画布。到目前为止,我到处都在使用百分比。但是,似乎 SVGpolygonpaths 不支持point属性中的百分比。这是一个例子:

(jsFiddle)

<svg width='90%' height='90%' style='background-color: whitesmoke'>
    <rect x='40%' y='40%' width='25%' height='25%' />

    <polygon points="0,0 0,100 30,20 30,0" />
    <polygon points="30,0 30,20 60,0 60,0" />
    <polygon points="60,0 60,0 90,30 90,0" />
</svg>

但是,如果我开始将points属性中的数字更改为百分比,则会在控制台中出现解析错误而失败。我正在寻找一种方法来获得可以随<svg>元素调整大小的多边形。

4

2 回答 2

86

通过使用 viewBox 和容器元素(无论大小),我认为您可以实现您正在寻找的效果:http: //jsfiddle.net/davegaeddert/WpeH4/

<div id="svg-container" style="width:100%;height:100%;">
    <svg width='100%' height='100%' viewBox="0 0 100 100" preserveAspectRatio="none" style='background-color: whitesmoke'>
        <rect x='40%' y='40%' width='25%' height='25%' />

        <polygon points="0,0 0,100 30,20 30,0" />
        <polygon points="30,0 30,20 60,0 60,0" />
        <polygon points="60,0 60,0 90,30 90,0" />
    </svg>
</div>

如果你给 viewBox 的大小,0 0 100 100那么这些点可以写成百分比,并且形状将随 svg 缩放。

于 2014-07-22T22:11:03.963 回答
1

您可以将元素组合在一起g并使用转换:

<svg width='90%' height='90%' style='background-color: whitesmoke'>
    <rect x='40%' y='40%' width='25%' height='25%' />

    <g transform="scale(0.4 0.4)">
        <polygon points="0,0 0,100 30,20 30,0"/>
        <polygon points="30,0 30,20 60,0 60,0"/>
        <polygon points="60,0 60,0 90,30 90,0"/>
    </g>
</svg>
于 2013-07-06T03:16:14.050 回答