以下是一些实用信息,我认为了解SVG视口和视图框架(viewPort 和 viewBox)尤其有助于工作。
SVG使用视口和视图框架这两个术语。视图框架位于视口之内。将视图框架视为图像本身,因为您可以在视口内缩放、向左/右或上/下滑动它。视口(即SVG标签本身)就像一个容器,其中包含SVG图像。您还可以调整并移动此容器的大小。而SVG标签则位于HTML容器(div、p、aside、h3等)中。因此,人们通常会觉得视口/viewBox有点令人困惑。只需将viewBox视为图像本身即可。
SVG标签上的width/height属性提供了视口的大小。这是显示SVG图像的容器的宽度/高度。 (您也可以有x=""和y=""属性,就像在viewBox属性中一样。)
所以,在SVG本身上,您需要指定width / height和起始的x偏移量/ y偏移量 - 这些被称为视口(也称为ViewPort Coord System)。在viewBox属性中,您需要指定"x y width height" - 这些被称为viewBox(也称为局部坐标系 LSC)。
<svg x="0" y="0" width="500" height="300"
viewBox="start_x start_y width height" >
...path fill d etc...
</svg>
重要概念 #1:视口的宽度 / 高度(指 SVG 标签本身的 width="" 和 height="")指定了 SVG 图像将要显示的容器大小。通常情况下,如果省略这些属性,容器大小会精确地与 SVG 图像本身的大小相同或稍微大一点。
超级重要概念 #2:视图框的宽度 / 高度直接关联到视口的宽度 / 高度。如果视口是 300 x 500,那么当视图框 W / H 数字变得比 300 x 500 更大时,图像本身会在视口内缩小(缩小)。但是当视图框的 w/h 变小于 300 x 500 时,图像本身会在视口内变大。这种增长是向右和向下的,因此如果你需要在现在太小的视口中滑动缩放后的图像,那么就需要使用 viewBox 的 X / Y 值。
viewBox x/y - 在视口内将 SVG 向右 / 向下滑动
viewBox width/height - 当 viewBox 的宽度 / 高度增加大于 SVG 标签的宽度 / 高度时,在视口内将图像缩小。SVG 在视口内向右 / 向下缩小。将数字减小至小于 SVG 宽度 / 高度属性:图像将在视口内增大,直到图像的右侧 / 底部被视口的右侧 / 底部遮挡。*(即当 viewBox 属性中的宽度 / 高度数字小于 SVG 上的宽度 / 高度属性时,图像在视口内缩放。当数字更大时,图像在视口内缩小。
viewPort x/y == 在其 HTML 容器中将视口本身向右 / 向下滑动
viewPort width/height - 调整整个视口的大小,可能超出 HTML 容器(div / p / 等)。基本上,通过向右 / 向下增长来使视口变大。
注意:
a. 如果在SVG上不包含ViewBox属性,则viewBox的大小等于视口(占据视口的100%)
b. 如果视图框起始于0,0
并且与SVG宽度/高度相同(即视口),则不会发生任何变化。相当于根本没有视图框属性。
c. 如果你的视口大小是一副牌的大小,但是SVG图像的大小是一个麦片盒子的大小,那么增加"xy..."数值将使麦片盒图像在视口中向上/向左移动,展示麦片盒图像的另一部分。这对于sprites很有用。
d. (通常(总是!)SVG元素也在HTML容器内 - 例如div、p、section、li等。我们没有讨论过这个问题,但请记住这一点。如果你的图像被裁剪了,那么可能是因为viewBox大于视口或HTML容器元素(div等)小于视口)
以下是两个(精彩的!)短视频,由本主题内的答案作者推荐:
2分钟视频演示
5分钟视频演示(同一人,更好)