可缩放至容器的SVG

时间:2018-07-18 12:52:58

标签: svg responsive-images

我想创建一个SVG,它可以缩放到容器的宽度,而没有调整其大小或变形的部分。因此,根据宽度,相同的图像可能会与以下任意图像一起呈现:

enter image description here

如您所见,左部分和右部分是(或至少看起来是)同一条路径的一部分,并且在所有情况下它们的大小和纵横比都相同。

似乎SVG的功能应该允许这样做,但是我不知道如何。显然,没有图形程序可以做到这一点,因此需要手工制作SVG。

可能的解决方案:

  • 多个对象:从重叠部分中构造形状是一种选择,但可能会出现混乱的重叠伪像。

  • 图像交换:我不想构造这些大小的固定数量,因为我无法预期所有可能的屏幕,窗口或设备大小。相反,我希望图像可以缩放到任何大小。

  • JavaScript:我真的希望避免这种情况,因为它需要放置SVG的每个页面或上下文来运行脚本来对其进行修复。

1 个答案:

答案 0 :(得分:1)

如果只有部分要放置在侧面,则可以利用嵌套preserveAspectRatio元素的<svg>属性。

<svg width="100%" height="50px">
  <rect fill="grey" width="100%" height="100%" />
  <svg width="100%" height="100%" viewBox="0 0 50 50" preserveAspectRatio="xMinYMid meet">
    <circle fill="white" cx="25" cy="25" r="18" />
  </svg>
  <svg width="100%" height="100%" viewBox="0 0 50 50" preserveAspectRatio="xMaxYMid meet">
    <circle fill="white" cx="25" cy="25" r="18" />
  </svg>
</svg>

如果您使用其他嵌套级别和定位技巧,则可以在四个角使用相同的方法:

body { height: 90vh; }
<svg width="100%" height="100%">
  <rect fill="grey" width="100%" height="100%" />
  <svg width="100%" height="50">
    <svg width="100%" height="100%" viewBox="0 0 50 50" preserveAspectRatio="xMinYMid meet">
      <circle fill="white" cx="25" cy="25" r="18" />
    </svg>
    <svg width="100%" height="100%" viewBox="0 0 50 50" preserveAspectRatio="xMaxYMid meet">
      <circle fill="white" cx="25" cy="25" r="18" />
    </svg>
  </svg>
  <svg width="100%" height="50" y="100%" transform="translate(0 -50)">
    <svg width="100%" height="100%" viewBox="0 0 50 50" preserveAspectRatio="xMinYMid meet">
      <circle fill="white" cx="25" cy="25" r="18" />
    </svg>
    <svg width="100%" height="100%" viewBox="0 0 50 50" preserveAspectRatio="xMaxYMid meet">
      <circle fill="white" cx="25" cy="25" r="18" />
    </svg>
  </svg>
</svg>