Как масштабировать изображение SVG, чтобы заполнить окно браузера?

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

Я хочу создать 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>

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

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


person Miral    schedule 13.04.2011    source источник
comment
Необъяснимо, я попытался переместить атрибуты встроенного стиля в блок стиля CSS в заголовке, и после этого это сработало. Я не знаю, почему это имело значение. (Хотя мне действительно нужно было добавить overflow: hidden - иначе была 4-пиксельная вертикальная прокрутка.)   -  person Miral    schedule 13.04.2011
comment
И ... о боже ... атрибуты svg чувствительны к регистру! viewbox не работает!   -  person Jeremy Field    schedule 25.04.2021


Ответы (1)


Как насчет:

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

Or:

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

person Phrogz    schedule 13.04.2011
comment
И запоздалый +1 за то, что покинул эту связь 2 года спустя. - person msanford; 11.04.2013
comment
Обратите внимание, что это решение полагается на атрибут viewBox. - person ubershmekel; 12.04.2014
comment
Ссылка все еще существует, почти 4 года спустя. Хорошая работа, @Phrogz! - person Richard; 06.03.2015
comment
Да, спасибо @Phrogz ... И на всякий случай я сделал кодовую версию: codepen.io/cyanos/full/XbXxOQ - person Jay; 11.05.2015
comment
И +1 более 8 лет - person Sudhir Kaushik; 24.05.2019
comment
Ух ты, последние 2 дня пытался сделать svg отзывчивым. Прекрасный ответ, и спасибо! - person Binita Bharati; 16.11.2020