Четыре числа в окне просмотра SVG: x, y, ширина и высота. Он устанавливает систему единиц для вашего SVG. Вот что происходит с прямоугольником 100 x 50, нарисованным при 50,50 в SVG размером 400 x 400 пикселей, когда вы вдвое уменьшаете размер ширины и высоты области просмотра отдельно и вместе.
<svg width="400px" height="400px" viewBox="0 0 400 400">
<animate attributeName="viewBox" values="0 0 400 400; 0 0 200 400; 0 0 400 400;0 0 400 200;0 0 400 400;0 0 200 200;" dur="15s" fill="freeze" />
<rect x="50" y="50" width="100" height="50" fill="blue" stroke-width="2" stroke="red"/>
</svg>
«Подожди минутку», вы можете подумать, «почему при уменьшении размера моего viewBox в два раза не растягивается ширина или высота моей формы, когда я меняю только один»ширины или высоты? Это не имеет смысла. "И на самом деле ты прав. В вашем SVG-элементе есть молчаливое значение по умолчанию, которое сохраняет соотношение сторон ваших фигур при изменении viewBox.
Если вы переопределите это значение по умолчанию, добавив preserveAspectRatio="none"
к SVG - анимация будет работать так, как вы могли ожидать -растягивая размеры x и y вашей фигуры отдельно, когда вы изменяете ширину и высоту отдельно.
<svg width="400px" height="400px" viewBox="0 0 400 400" preserveAspectRatio="none">
<animate attributeName="viewBox" values="0 0 400 400; 0 0 200 400; 0 0 400 400;0 0 400 200;0 0 400 400;0 0 200 200;" dur="15s" fill="freeze" />
<rect x="50" y="50" width="100" height="50" fill="blue" stroke-width="2" stroke="red"/>
</svg>