SVG画布宽高

1 篇文章 0 订阅

viewport

表示SVG可见区域的大小。一个SVG图像理论上可以无限大,但是在同一时刻只有图像的某些部分可以被看见。这个可见的区域就被称为viewport。

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

以上代码定义了一个视区,宽500单位,高300单位;

在SVG中,可以带单位,也可以不带单位。如果没有为值指定单位,那么它将使用像素为单位。也就是说上面的例子中,viewport的宽度为500px,高度为300px。

单位含义
em相对于父元素的字体大小
ex相对于小写字母"x"的高度
px相对于屏幕分辨率而不是视窗大小:通常为1个点或1/72英寸
ininch, 表英寸
cmcentimeter, 表厘米
mmmillimeter, 表毫米
pt1/72英寸
pc12点活字,或1/12点
%相对于父元素。正常情况下是通过属性定义自身或其他元素

viewbox

viewBox是用于在画布上绘制SVG图形的坐标系统。这个坐标系统可以比viewport大,也可以比viewport小,并且它可以在viewport中完全可见或部分可见。

<svg viewbox="<min-x> <min-y> width height"><svg>

和值决定viewbox的左上角位置。和值决定viewbox的宽度和高度。

注意:viewBox的宽度和高度不需要设置得和<svg>元素的宽度和高度相同。和不允许设置为负数。

preserveAspectRatio(保持宽高比)

如果viewport和viewBox的宽高比不相同。你需要自己来指定如何在SVG中显示SVG图像。你可以在<svg>中使用preserveAspectRatio属性来指定。

preserveAspectRatio="xMidYMid meet"

preserveAspectRatio属性的值为空格分隔的两个值组合而成。

例如,上面的xMidYMid和meet.

第1个值表示,viewBox如何与SVG viewport对齐;第2个值表示,如何维持高宽比(如果有)。

其中,第1个值又是由两部分组成的。前半部分表示x方向对齐,后半部分表示y方向对齐。家族成员如下:

含义
xMinviewport和viewBox左边对齐
xMidviewport和viewBox x轴中心对齐
xMaxviewport和viewBox右边对齐
YMinviewport和viewBox上边缘对齐。注意Y是大写。
YMidviewport和viewBox y轴中心点对齐。注意Y是大写。
YMaxviewport和viewBox下边缘对齐。注意Y是大写。

将上面表格中的各个值两两组合,可以得到下面的9种align值:

  • xMinYMin:viewBox的对齐viewport的最小X值,min-y对齐viewport的最小Y值。相当于backrgound-position: 0% 0%;。
  • xMinYMid:viewBox的对齐viewport的最小X值,viewBox的Y轴中点对齐viewport的Y轴中点。相当于backrgound-position: 0% 50%;。
  • xMinYMax:viewBox的对齐viewport的最小X值,min-y+对齐viewport的最大Y值。相当于backrgound-position: 0% 100%;。
  • xMidYMin:viewBox的X轴中点对齐viewport的X轴中点,min-y对齐viewport的最小Y值。相当于backrgound-position: 50% 0%;。
  • xMidYMid(默认值):viewBox的X轴中点对齐viewport的X轴中点,viewBox的Y轴中点对齐viewport的Y轴中点。相当于backrgound-position: 50% 50%;。
  • xMidYMax:viewBox的X轴中点对齐viewport的X轴中点,min-y+对齐viewport的最大Y值。相当于backrgound-position: 50% 100%;。
  • xMaxYMin:viewBox的+对齐viewportX轴的最大值,min-y对齐viewport的最小Y值。相当于backrgound-position: 100% 0%;。
  • xMaxYMid:viewBox的+对齐viewportX轴的最大值,viewBox的Y轴中点对齐viewport的Y轴中点。相当于backrgound-position: 100% 50%;。
  • xMaxYMax:viewBox的+对齐viewportX轴的最大值,min-y+对齐viewport的最大Y值。相当于backrgound-position: 100% 100%;。

第2部分的值支持下面3个:

含义
meet保持宽高比并将viewBox缩放为适合viewport的大小
slice保持宽高比并将所有不在viewport中的viewBox剪裁掉
none不保存宽高比。缩放图像适合整个viewbox,可能会发生图像变形

Demo

demo地址: https://www.sarasoueidan.com/demos/interactive-svg-coordinate-system/index.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要计算SVG画布上显示区域的比例,需要首先获取SVG元素的宽度和高度,可以通过DOM API中的getBoundingClientRect()方法来实现。具体实现代码如下: ``` const svgElement = document.querySelector('svg'); // 获取SVG元素 const svgRect = svgElement.getBoundingClientRect(); // 获取SVG元素的矩形对象 const svgWidth = svgRect.width; // 获取SVG元素的宽度 const svgHeight = svgRect.height; // 获取SVG元素的高度 const aspectRatio = svgWidth / svgHeight; // 计算SVG画布宽高比例 ``` 接下来,可以通过设置一个比例因子来确定SVG文字的大小。比例因子可以根据实际需求进行调整。比如,如果需要让文字大小占据SVG画布高度的10%,可以设置比例因子为0.1。然后,根据SVG画布宽高比例和比例因子来计算文字大小。具体实现代码如下: ``` const scaleFactor = 0.1; // 设置比例因子 const fontSize = scaleFactor * svgHeight / aspectRatio; // 计算SVG文字大小 ``` 最后,可以将计算得到的文字大小应用到SVG文本元素上。具体实现代码如下: ``` const textElement = document.querySelector('text'); // 获取SVG文本元素 textElement.style.fontSize = `${fontSize}px`; // 设置SVG文本元素的字体大小 ``` 注意:以上代码中的计算方式仅适用于SVG画布宽高比例与浏览器窗口宽高比例相同的情况。如果SVG画布宽高比例与浏览器窗口宽高比例不同,需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第七感 de秘密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值