Как масштабировать изображение SVG, чтобы заполнить окно браузера? - PullRequest
82 голосов
/ 13 апреля 2011

Кажется, это должно быть легко, но я просто ничего не понимаю.

Я хочу создать HTML-страницу, содержащую одно изображение SVG, которое автоматически масштабируется по размеру окна браузера без каких-либопрокрутка и сохранение его пропорций.

Например, на данный момент у меня есть SVG-изображение 1024x768;если область просмотра браузера 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>

Однако это масштабирование дополная ширина браузера (для широкого, но короткого окна) и вертикальная прокрутка, а это не то, что мне нужно.

Чего мне не хватает?

1 Ответ

156 голосов
/ 13 апреля 2011

Как насчет:

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 может гарантировать, что полосы прокрутки никогда не появятся (если у вас есть дополнительный контент. )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...