【问题标题】:SVG viewBox scaling and croppingSVG viewBox 缩放和裁剪
【发布时间】:2015-01-21 23:08:31
【问题描述】:

如何从 SVG 输出某个位置并对其进行缩放?

E. g.,我有以下带有 SVG 的 HTML(代码的副本及其渲染位于 http://jsfiddle.net/5e0pas9m/)。

<div style="border: 1px solid black;">1
<svg width="100" height="100" viewBox="0 0 200 200" style="border: 1px solid red; transform: scale(1);" preserveAspectRatio="xMidYMid none">
  <rect width="100%" height="100%" style="fill:rgb(200,200,255);stroke-width:4;stroke:rgb(100,100,255)" />
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
  <circle cx="150" cy="150" r="40" stroke="red" stroke-width="4" fill="yellow" />
</svg>
</div>

<div style="border: 1px solid black;">2
<svg width="100" height="100" viewBox="0 0 100 100" style="border: 1px solid red; transform: scale(1);" preserveAspectRatio="xMidYMid none">
  <rect width="100%" height="100%" style="fill:rgb(200,200,255);stroke-width:4;stroke:rgb(100,100,255)" />
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
  <circle cx="150" cy="150" r="40" stroke="red" stroke-width="4" fill="yellow" />
</svg>
</div>

<div style="border: 1px solid black;">3
<svg width="100" height="100" viewBox="100 100 200 200" style="border: 1px solid red; transform: scale(1);" preserveAspectRatio="xMidYMid none">
  <rect width="100%" height="100%" style="fill:rgb(200,200,255);stroke-width:4;stroke:rgb(100,100,255)" />
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
  <circle cx="150" cy="150" r="40" stroke="red" stroke-width="4" fill="yellow" />
</svg>
</div>

<div style="border: 1px solid black;">4
<svg width="100" height="100" style="border: 1px solid red; transform: scale(1);" preserveAspectRatio="xMidYMid none">
  <g transform="scale(1), translate(-100 -100)">
  <rect width="100%" height="100%" style="fill:rgb(200,200,255);stroke-width:4;stroke:rgb(100,100,255)" />
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
  <circle cx="150" cy="150" r="40" stroke="red" stroke-width="4" fill="yellow" />
  </g>
</svg>
</div>

div-1 显示我的完整图像。

如果我只想在同一个窗口中显示左上角,我会设置 viewBox="0 0 100 100" (div-2),它大致给出了我想要的:适合窗口的图像部分.

但是当我对右下角(div-3 代表 viewBox="100 100 200 200")做同样的事情时,图像只被翻译但没有被拟合/缩放/缩放。

div-4 nealry 显示了我通过另一种技术实现的目标的示例。

【问题讨论】:

    标签: html svg crop scaling


    【解决方案1】:

    viewBox 的第三个和第四个参数是宽度和高度,而不是 maxX 和 maxY。所以右下角示例的 viewBox 应该是“100 100 100 100”。

    【讨论】:

    • 真丢脸。我想你可以想象我对这个愚蠢的问题有多么可怕。我什至这样做了(“100 100 100 100”),但认为这是不正确的行为。
    • 对于它的价值,我发现 viewBox 非常令人困惑,所以至少有人认为你不应该感到糟糕!
    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 2022-01-11
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多