preserveAspectRatio

111 阅读1分钟

SVG width/height定义的是viewport大小,viewBox决定此时显示什么内容。 svg本身是一个无限空间的画布

meet

meet在保持viewbox纵横比的情况下, 等比例缩放viewbox, 使得整个viewBox在viewport内可见

  • 当viewBox所有边小于viewport, 进行放大

  • 当viewBox任1边大于等于viewport, 进行缩小

例子

假设viewport 300 * 300

  1. viewBox 200 * 100

viewBox所有边小于viewport, 因此需要放大, 放大倍数 = 300 / 200
Untitled-2022-11-03-1025.png

  1. viewBox 600 * 450

因此需要缩小, 缩小倍数=600 / 300

  1. viewBox 600 * 100

同上

slice

slice在保持viewbox纵横比的前提下,等比例缩放viewbox, 使得整个viewbox可以覆盖viewport

  • 当viewBox任1一边小于viewport, 进行放大

  • 当viewBox所有边大于viewport, 进行缩小

:::info 无论是meet还是slice, 都要保持viewBox纵横比。区别在于meet是viewport装viewBox, 而slice是viewBox装viewport :::

步骤

  1. 确定viewBox实际区域和实际大小
  2. 根据meet slice 决定如何进行缩放
  3. 根据preserveAspectRatio第一个参数决定怎么对齐, defalut: xMidYMid meet

image.png

参考文献