如何缩放SVG图像以填充浏览器窗口?

Mir*_*ral 86 xhtml layout scaling svg aspect-ratio

这似乎应该很容易,但我只是没有得到什么.

我想创建一个包含单个SVG图像的HTML页面,该图像会自动缩放以适应浏览器窗口,无需任何滚动,同时保留其纵横比.

例如,目前我有一个1024x768的SVG图像; 如果浏览器视口是1980x1000,那么我希望图像显示为1333x1000(垂直填充,水平居中).如果浏览器是800x1000,那么我希望它以800x600显示(水平填充,垂直居中).

目前我的定义如下:

<body style="height: 100%">
  <div id="content" style="width: 100%; height: 100%">
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1"
         width="100%" height="100%"
         viewBox="0 0 1024 768"
         preserveAspectRatio="xMidYMid meet">
      ...
    </svg>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

然而,这是扩展到浏览器的整个宽度(对于宽而短的窗口)并产生垂直滚动,这不是我想要的.

我错过了什么?

Phr*_*ogz 161

怎么样:

html, body { margin:0; padding:0; overflow:hidden }
svg { position:fixed; top:0; bottom:0; left:0; right:0 }
Run Code Online (Sandbox Code Playgroud)

要么:

html, body { margin:0; padding:0; overflow:hidden }
svg { position:fixed; top:0; left:0; height:100%; width:100% }
Run Code Online (Sandbox Code Playgroud)

我在我的网站上有一个使用(粗略)这种技术的例子,尽管周围有5%的填充,position:absolute而是使用而不是position:fixed:http:
//phrogz.net/svg/svg_in_xhtml5.xhtml

(使用position:fixed可防止链接到页面上的子页面锚点的非常边缘情况,并且overflow:hidden可以确保不会出现任何滚动条(如果您有额外的内容.)

  • 并且将该链接延迟2年后的+1. (34认同)
  • 是的,谢谢@Phrogz ......为了防止它崩溃,我制作了一个codepen版本:http://codepen.io/cyanos/full/XbXxOQ/ (10认同)
  • 请注意,此解决方案依赖于`viewBox`属性. (7认同)
  • 近4年后,这里的链接就是_still_.干得好,@ Phrogz! (3认同)
  • 并且+1超过8年 (2认同)