我想有一个内联svg元素的内容缩放时,大小是非本地的。当然,我可以将它作为一个单独的文件并按比例缩放。如何使用父容器制作svg比例尺?
的index.html:<img src="foo.svg" style="width: 100%;" />
foo.svg:<svg width="123" height="456"></svg>
不过,我想更多的样式添加到SVG通CSS,所以连接外接一个是不是一种选择。我如何制作内联SVG缩放?
我想有一个内联svg元素的内容缩放时,大小是非本地的。当然,我可以将它作为一个单独的文件并按比例缩放。如何使用父容器制作svg比例尺?
的index.html:<img src="foo.svg" style="width: 100%;" />
foo.svg:<svg width="123" height="456"></svg>
不过,我想更多的样式添加到SVG通CSS,所以连接外接一个是不是一种选择。我如何制作内联SVG缩放?
要指定SVG图像内的坐标,而不依赖图像的缩放大小,请使用SVG元素上的viewBox
属性定义图像的边界框在图像的坐标系中,并使用width
和height
属性来定义相对于包含页面的宽度或高度。
举例来说,如果你具备以下条件:
<svg>
<polygon fill=red stroke-width=0
points="0,10 20,10 10,0" />
</svg>
它将由20像素三角形10px的渲染:
现在,如果你只设置宽度和高度,这将改变SVG元素的大小,但不会缩放三角形:
<svg width=100 height=50>
<polygon fill=red stroke-width=0
points="0,10 20,10 10,0" />
</svg>
如果设置了视图框,会导致它对图像进行转换,使给定框(在图像的坐标系中)被放大以适合给定宽度和高度(在坐标系中的页面)。例如,为了扩大三角形是100像素50像素:
<svg width=100 height=50 viewBox="0 0 20 10">
<polygon fill=red stroke-width=0
points="0,10 20,10 10,0" />
</svg>
如果你想将其放大到HTML视口的宽度:
<svg width="100%" viewBox="0 0 20 10">
<polygon fill=red stroke-width=0
points="0,10 20,10 10,0" />
</svg>
请注意,默认情况下,宽高比将保留。所以,如果你指定的元素应该有100%的宽度,但50像素的高度,它实际上只规模达50像素的高度(除非你有一个很窄的窗口):
<svg width="100%" height="50px" viewBox="0 0 20 10">
<polygon fill=red stroke-width=0
points="0,10 20,10 10,0" />
</svg>
如果你真的希望它与preserveAspectRatio=none
水平拉伸,禁用长宽比保存:
<svg width="100%" height="50px" viewBox="0 0 20 10" preserveAspectRatio="none">
<polygon fill=red stroke-width=0
points="0,10 20,10 10,0" />
</svg>
(注意,虽然在我的示例中使用的语法适用于HTML嵌入,但将示例作为一个图像包含在StackOverflow中,而不是嵌入另一个SVG中,因此我需要使用有效的XML语法)
您'会希望做一个转换为这样的:
用JavaScript:
document.getElementById(yourtarget).setAttribute("transform", "scale(2.0)");
使用CSS:
#yourtarget {
transform:scale(2.0);
-webkit-transform:scale(2.0);
}
环绕你SVG在页组标签这样和目标它来操纵整个页面:
<svg>
<g id="yourtarget">
your svg page
</g>
</svg>
注意:规模1.0是100%
好的。我不想在这个JS。有没有办法让它变成适合父母? – bjb568
@bj setAttribute与
尝试前是工作美分svg宽度和高度。 – ncm
@ncm JS会如何处理? – Mawg