Вопрос: Как я могу использовать систему координат viewBox, по-прежнему полностью заполняя viewPort и сохраняя соотношение сторон?
Я новичок в программировании svg, поэтому, надеюсь, я просто неправильно понимаю базовую концепцию.
Я хочу создать интерактивную и адаптивную карту на основе фонового изображения, загружаемого пользователем.
Вот базовый пример, с которым я пытаюсь приступить к работе (JSFiddle):
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="200px"
height="400px"
preserveAspectRatio="xMidYMid meet"
style="border: 1px solid black;">
<image x="0" y="0" width="100%" height="100%"
preserveAspectRatio="xMidYMid meet"
xlink:href="http://www.bized.co.uk/sites/bized/modules/bized_cb_navigation/images/floorplan_info.gif">
</image>
</svg>
Это прекрасно работает. поскольку, однако, viewPort изменяется, изображение всегда заполняет его, сохраняя при этом соотношение сторон. (См. пример широкоэкранного изображения)
Затем я добавляю систему координат viewBox="0 0 100 100"
:
- широкоэкранный вид по-прежнему хорошо заполняется
- но теперь вертикальный экран больше не заполняет viewPort
Если вы возьмете другое изображение, ширина которого больше, чем высота, широкоэкранный вид прерывается, а вертикальный вид по-прежнему работает.
Когда я проверяю SVG в инспекторе элементов DOM Chrome, для первых двух примеров без использования viewBox="0 0 100 100"
элемент svg имеет тот же размер, что и viewPort. После добавления атрибута viewBox элемент становится квадратом со сторонами, равными меньшей из сторон viewPort.
Это поведение объясняется в этом руководстве как:
«... окно просмотра масштабируется в соответствии с меньшим из двух соотношений сторон ...»
Мне нужен атрибут viewBox, чтобы я мог масштабировать и панорамировать изображение в viewPort.