SVG 的宽度和高度未发生变化。

3

当我尝试更改SVG标签的高度和宽度时,它会发生变化,但是地图内部被裁剪了。

这是SVG文件的示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="500pt" height="500pt" viewBox="0 0 500 500" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <g transform="translate(528,270)" > 
        <g id="states" fill="green" width="500pt" height="500pt" >
            <a id="s01">
                <path d="M158.95067408594068,46.88327098850149L185.03303599629845,44.0148159910488L189.74121811302572,59.50889743727097L196.59587401503094,82.27898337817625L199.0518321008348,87.17077847298319L201.13017099189912,89.85649424407167L200.707578706067,91.7588142001174L202.6261541288344,92.6205139503571L200.33524838576966,95.29216920133321L200.7363444144292,97.59217497211156L199.80999341478454,100.8918397716738L202.09021078470892,106.20782432993735L201.64399529140977,111.17790897235179L204.03767592952832,115.96122130827978L196.3574723373462,117.09985438789514L163.47293491613115,121.08122011183377L163.22294648718562,123.55296427740802L167.13791879442175,126.6835133291724L166.871741037497,129.76735843938286L168.2485001228969,131.1400084527912L166.21795234496457,134.1137855808483L164.12121282499038,134.9547500732084L159.81791064191435,132.36796011584426L158.90469329765804,127.88713803963412L157.64560372254968,127.51168600895127L156.5390262005875,131.08669596034315L156.36678872306632,134.46030822963786L152.20800610122825,133.97284127048096L148.16895577705603,105.98121856614907L148.12136132417422,70.56398790998259L148.15893441899317,50.102043132249676L146.40831263672231,48.33943105796875Z" stroke="#FFFFFF" stroke-dasharray="1, 0" stroke-width="1.5"></path>
                <text x="162.66165594858754" y="86.92631614090374" style="">AL</text>
                <title></title>
            </a>
            <a id="s02">

你想要缩小它吗?无论如何,更改容器的大小对子节点没有影响。您必须应用比例变换。 - ZimTis
ZimTis是不正确的。该文件具有viewBox属性,因此更改宽度和高度属性应更改页面上图像的大小。不清楚您遇到的确切问题是什么。您可以发布图片或一个fiddle吗? - Paul LeBeau
抱歉,我没看到,感谢您的纠正。 - ZimTis
1个回答

1
在玩了你的示例之后,我认为我有一个关于可能发生的事情的想法。
你尝试调整文件大小时做了什么?你改变了宽度和高度,还是改变了 viewBox 的值?还是两者都改变了?
在你发布的片段中,Alabama 的轮廓超出了图片的右边缘。这是由于第一组中的变换所致:
transform="translate(528,270)"

将Alabama的起点移动到528,270,这已超出了视口(500x500)定义的图表边缘。

因此,改变宽度和高度不会使Alabama重新出现在页面上。您必须更改viewBox,以便它包括Alabama所在页面的部分。例如,如果您将其更改为:

viewBox="0 0 1000 500"

现在你可以看到Alabama,并且你可以将地图的大小改变为任何你想要的尺寸。

这里是演示

简而言之,viewBox(x y width height)描述了页面内容的边界。 widthheight告诉渲染器如何缩放由viewBox描述的区域的大小。 因此,在这种情况下,所有1000x500视口中的内容都将被缩放,以适合由宽度和高度定义的框(500x500)。 因此,实际上,地图将按这些值进行缩小(从1000x500缩小到500x250)。


@bigBadboom 实际上,当我更改宽度、高度和视口参数时,我希望SVG图像能够缩小并适应于视口。谢谢。 - user2975771
当我改变视图框的宽度和高度时,视图框内的图形大小不会改变,但会被裁剪。 - user2975771
如果图像边缘外有内容,则需要更改viewBox(仅限)以使其大于所有内容。调整viewBox的x,y,width和height,使其与您的内容紧密匹配。一旦所有内容都可见,您可以调整<svg>的宽度和高度,以便在页面上获得所需的图像大小。 - Paul LeBeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接