Попробуйте добавить следующий CSS-код, который приведет к адаптивному изменению ширины фактического элемента SVG при необходимости:
#root svg {
width:100%;
}
Вот работающий jsFiddle, чтобы продемонстрировать эту работу с вашим кодом.
В качестве альтернативы, если вы хотите добиться того же поведения с помощью javascript, вы можете обновить ваш скрипт следующим образом (что сделает CSS выше избыточным):
const obj = document.createElement('div');
// svg contains vector data from jsFiddle link in OP
obj.innerHTML = svg;
app.appendChild(obj);
// Adding this achieves the same result as the CSS above
obj.querySelector('svg').style.width = '100%';
Обновление
Необходимо иметь viewbox
, определенный в вашем SVG, чтобы поведение изменения размера, показанное выше, работало.viewbox
в основном представляет домен / измерения, к которым относятся координаты в SVG.
Если в SVG определены width
и height
, то для определения viewbox
используется следующий методбудет хорошо работать в большинстве ситуаций:
const svgElement = obj.querySelector('svg');
const width = svgElement.getAttribute('width');
const height = svgElement.getAttribute('height');
// Set the viewbox "domain" from top left (0,0), to bottom right (width, height)
svgElement.setAttribute('viewBox', "0 0 " + width + " " + height);
Рабочий пример этого можно найти здесь