这是一些实用的信息,对于理解SVG viewPort和viewBox(特别是与之配合使用)很有帮助。
SVG使用术语viewPort和viewBox。viewBox位于viewPort内部。将viewBox视为图像本身-因为您可以缩放它,因此可以在viewPort中全部向左/向右/向上/向下滑动。viewPort(SVG标签本身)就像是SVG图像位于其中的容器。您也可以调整大小,然后左右/左右移动。SVG标签位于HTML容器内(div,p,aside,h3等)。因此,您可以看到为什么人们发现viewPort / viewBox有点令人困惑。只需将viewBox视为图像本身即可。
SVG标签上的width / height属性提供了viewPort的大小。这是显示SVG图像的容器的宽度/高度。(您也可以x=""
和y=""
属性,就像在viewBox属性中一样。)
因此,在SVG本身上,您指定width / height和起始x offset /起始y offset –称为viewPort (又名ViewPort Coord System)
。在viewBox属性中,指定“ xy width height” –这些称为viewBox (又称本地协调系统LCS)
<svg x="0" y="0" width="500" height="300"
viewBox="start_x start_y width height" >
...path fill d etc...
</svg>
重要概念1:viewPort的宽度/高度(在SVG标签自身上,为width =“”和height =“”)指定将显示SVG图像的容器的大小。通常,如果省略,则为SVG图片本身的确切大小(或稍大一点)。
超级重要概念2:viewBox的宽度/高度与viewPort的宽度/高度直接相关。如果viewPort为300 x 500,则当viewBox的W / H数大于300 x 500时,图像本身在viewPort中变小(缩小)。但是随着w / h的viewBox变得小于300 x 500,图像本身在viewPort中变得更大。这种增长是左右移动的,因此,如果您需要在现在太小的viewPort中滑动放大的图像,那就是使用viewBox的X / Y值时。
viewBox x / y –将SVG在viewPort内部向右/向下滑动
viewBox的宽度/高度–与SVG标签的宽度/高度相比,增大时,它会将图像缩小到viewPort内部。SVG在视口内向右/向下收缩。将数字减少到SVG宽度/高度属性以下:图像将在视口中增长,直到图像右侧/底部的部分可能被viewPort的右侧/底部截断。*(即,当viewBox属性中的宽度/高度数字小于SVG上的width / height属性时,viewPort中的图像ZOOMS IN。较大时,图像通过viewPort缩小(缩小)。
viewPort x / y ==在HTML容器的viewPort宽度/高度内向右/向下滑动视口–将整个viewPort调整为更大的尺寸,可能会使HTML容器溢出(div / p /等)。基本上,通过向右/向右增大viewPort使其更大。
注意事项:
一。如果未在SVG上包括ViewBox属性,则viewBox的大小等于viewPort的大小(占viewPort的100%)
b。如果viewBox开始0,0
并且具有与SVG宽度/高度相同的宽度/高度(即viewPort),则什么都不会改变。等同于根本没有viewbox属性。
C。如果您的viewPort大小为一副纸牌,但SVG图像为谷物盒的大小,那么增加viewBox的“ xy…”数字将使谷物盒图像在viewPort中向上/向左移动,从而显示出不同的谷物盒图像的一部分。这对精灵
d很有用。(通常(总是(总是)!)SVG元素也位于HTML容器内-div,p,section,li等)。我们没有讨论过,但请记住。如果图像被截断,则可以使用viewBox大于viewPort-或者-HTML容器元素(div等)小于viewPort)
这是两个(出色的!)短片,由这个答案的作者在同一主题中提及:
2分钟的视频演示
5分钟的视频演示(同一个家伙,要好得多)