1. ホーム
  2. layout

[解決済み] SVG 画像をブラウザのウィンドウいっぱいに拡大縮小するには?

2023-01-10 06:06:38

質問

これは簡単なことのように思えますが、私は何かを得ることができないのです。

私は、ブラウザのウィンドウに合わせて自動的に拡大縮小する単一の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>

しかし、これはブラウザの幅いっぱいに拡大され(幅は広いが短いウィンドウのため)、私が望むものではない垂直スクロールを発生させます。

何が足りないのでしょうか?

どのように解決するのですか?

どうでしょう。

html, body { margin:0; padding:0; overflow:hidden }
svg { position:fixed; top:0; bottom:0; left:0; right:0 }

または

html, body { margin:0; padding:0; overflow:hidden }
svg { position:fixed; top:0; left:0; height:100%; width:100% }

私のサイトでは、(おおよそ)このテクニックを使って、5%のパディングを全体に施しながら position:absolute の代わりに position:fixed :

http://phrogz.net/svg/svg_in_xhtml5.xhtml

(使用 position:fixed を使うことで、ページ内のサブページのアンカーにリンクするという非常にエッジケースなシナリオを防ぐことができますし overflow:hidden はスクロールバーが表示されないようにすることができます (余分なコンテンツがある場合に備えて。)。