理解SVG中视窗、viewBox和preserveAspectRatio

viewBox

viewBox就是视野,我们可以把它看作是一张照片。
viewBox有四个参数,viewbox="x, y, width, height"


坐标系统
<svg
        xmlns="http://www.w3.org/2000/svg"
        viewBox="0 0 100 200"
      >
</svg>

如上述代码所示,viewBox在画布上定义了一个从(0,0)点开始,宽为100,高为200的可显示区域,超过这个区域边界的元素将不会显示。

viewPort

viewPort是视窗,视窗是svg的容器。

<svg
        xmlns="http://www.w3.org/2000/svg"
        width="200"
        height="400"
        viewBox="0 0 100 200"
      >
</svg>

如代码所示,定义了一个宽为200,高为400的容器视窗。
因为viewBox是宽为

前面我们说到,viewBox就是视野,我们可以把它看作是一张照片。

  • 如果容器大小,比viewBox大小更大,那么相片整体会放大,以填满整个容器
  • 如果容器大小,比viewBox大小更小,那么相片整体会缩小,以填满整个容器
<svg
        xmlns="http://www.w3.org/2000/svg"
        width="200"
        height="400"
        viewBox="0 0 100 200"
      >
</svg>

如代码所示,容器视窗宽为200,高为400;viewBox是宽为100,高为200。容器大小是viewBox大小的一倍大,所以最后看到的内容是被放大了一倍的效果。

preserveAspectRatio

用于设置如何在视窗中显示viewBox的内容。
此属性有两个值,
第一个值:设置viewBox和视窗的对齐方式。
第二个值:如何维持宽高比

第一个值

x轴方向的对齐:

对齐方式 说明
xMin 视窗与viewBox左边对齐
xMid 视窗与viewBox中心对齐(在x轴上中心对齐)
xMax 视窗与viewBox右边对齐

y轴方向的对齐:

对齐方式 说明
YMin 视窗与viewBox左上边对齐
YMid 视窗与viewBox中心对齐(在y轴上中心对齐)
YMax 视窗与viewBox右下边对齐

第一个值的组合规则是:

X轴的对齐方式 + Y轴的对齐方式
如:xMaxYMax,意思是X轴上右对齐,Y轴下对齐。

第二个值
宽高比 说明
meet 保证viewBox宽高比,在视窗内能够完全显示viewBox的前提下,尽可能去放大viewBox
slice 保证viewBox宽高比,尽可能去放大viewBox, 填满视窗。
none 不用保证viewBox宽高比,直接填满视窗。
  • meet viewBox宽高比保证,且显示完全
<svg
        xmlns="http://www.w3.org/2000/svg"
        width="200"
        height="400"
        viewBox="0 0 200 100"
        preserveAspectRatio="xMinYMin meet"
      >
</svg>
  • slice viewBox宽高比保证,显示不全
<svg
        xmlns="http://www.w3.org/2000/svg"
        width="200"
        height="400"
        viewBox="0 0 200 100"
        preserveAspectRatio="xMinYMin slice"
      >
</svg>
  • none viewBox宽高比不保持,显示完全
<svg
        xmlns="http://www.w3.org/2000/svg"
        width="200"
        height="400"
        viewBox="0 0 200 100"
        preserveAspectRatio="none"
      >
</svg>

之前学习到这几个属性的时候,我就困惑了很久,后面终于弄清楚了。所以记好笔记博客,与君共享。

如果你通过这篇文章还是没有弄清楚这几个属性,亦或者你懒得看文字,那么可以移步到这个学习视频哦,这个小姐姐讲得不错,我这篇文章就是通过这个视频做的学习笔记。
|
|----》任意门

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.viewPort 表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小。 上面的SVG代码定义了一个视...
    YU_XI阅读 10,451评论 0 0
  • 理解SVG坐标系和变换(第三部分)-建立新视窗 (本文转自w3cplus,这里仅修正了部分个人认为翻译不恰当之处;...
    王策北阅读 2,707评论 0 1
  • 1、CSS笔记: 点击链接后退页面: 回到上一个网页 ——修改placeholder提示的样式: 1.除IE外通用...
    倚剑闯天涯_阅读 4,276评论 1 2
  • SVG开篇 SVG是可缩放的矢量图,在计算机中有两种图形,一种是位图,一种是矢量图 位图传统的jpg / png ...
    七分之二十四阅读 3,153评论 0 0
  • @(HTML5)[canvas与SVG] [TOC] 十一 、SVG HTML体系中,最常用的绘制矢量图的技术是S...
    踏浪free阅读 10,060评论 0 2

友情链接更多精彩内容