SVG之viewport、viewBox、preserveAspectRatio(5)

SVG之viewport、viewBox、preserveAspectRatio(5)

viewport

viewport表示SVG可见区域大小(或者说SVG的画布大小)

如:

<svg width="500" height="500"></svg>

这儿的viewport大小就是500 X 500

viewBox

viewBox是svg标签中的一个属性

如:

<svg width="400" height="300" viewBox="0,0,40,30"></svg>

其有四个用‘,’分割的参数,意思为:

前两个参数确定viewBox盒子左上角的坐标(这儿是(0,0)),第三/四个参数表示viewBox盒子的宽/高

下面用一张图来描述(可视化)viewBox

#svg{
    border: 1px solid #ccc;
}

<svg id="svg" width="400" height="400" viewBox="0,0,70,70">
    <rect x="10" y="10" width="50" height="50"></rect>
</svg>

这里写图片描述

其实viewBox就是这么简单,复杂的是将其与preserveAspectRatio结合后

preserveAspectRatio

preserveAspectRatio也是svg标签的一个属性

如:

<svg width="400" height="300" viewBox="0,0,40,30" preserveAspectRatio="xMinYMin meet"></svg>

其有两个参数

  • 第一个参数

第一个参数用来设置viewBox相对于viewport的位置,其分为两部分:

含义
xMinviewBox的左边缘与viewport的左边缘对齐
xMidviewBox盒子在viewport中水平居中
xMaxviewBox的右边缘与viewport的右边缘对齐
YMinviewBox的上边缘与viewport的上边缘对齐
YMidviewBox盒子在viewport中垂直居中
YMaxviewBox的下边缘与viewport的下边缘对齐

注意上述x,Y的大小写,这些值可以随意组合。如:

xMidYMid:表示viewBox盒子水平且垂直居中

xMinYMin表示viewBox盒子位于左上角

在不考虑第二个参数的情况下,我们再通过一张图来理解一下第一个参数:

这里写图片描述

  • 第二个参数

第二个参数的作用是:在第一个参数确定了viewBox盒子相对于viewport的位置后,在此基础上对viewBox盒子进行缩放。(即第一个参数确定viewBox位置,第二个参数在该位置对viewBox进行缩放)

参数取值:

含义
meet保持纵横比缩放viewBox,类似于background-size中的contain
slice保持纵横比缩放viewBox,类似于background-size中的cover
none不保持纵横比缩放viewBox,填满viewBox就行

下面我们一个一个好好理解:

meet:

这里写图片描述

上图展现了不同位置处,viewBox盒子的缩放方向

下面我们再通过一张动图展现左上角viewBox的缩放过程,以便想象其他情况下的缩放过程

这里写图片描述

最重要的一点——在缩放过程中,一旦viewBox盒子的某条边与viewport的某条边重合(即缩放到viewport的边界了),那么meet缩放便终止。这在确定viewBox与viewport两个盒子的边不成比例情况下的缩放时尤为重要

slice:

viewBox盒子的缩放方向同上图展现的一致

这里写图片描述

我想,或许将slice的特点描述的比较清楚了吧!

none:

none很好理解

这里写图片描述

本文演示代码很少,还需要自己多实践体会

ps:本文参考了

https://www.w3cplus.com/html5/svg-viewport-viewbox-preserveaspectratio.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值