Ответ 1
-
У вас обязательно должен быть атрибут
viewBox
вашего SVG-элемента, который описывает ограничительную рамку содержимого, которое вы хотите всегда видимый. (В файле, на который вы ссылаетесь, нет, вы хотите добавить его.) -
Чтобы заставить SVG заполнить элемент HTML, поместите в свой обертку атрибут CSS
position:relative
(илиposition:absolute
илиposition:fixed
), а затем -
Установите атрибут CSS
position:absolute
в свой элемент<svg>
, чтобы заставить его сидеть внутри и заполнить ваш div. (При необходимости также применитеleft:0; top:0; width:100%; height:100%
.)
Если у вас есть viewBox
и ваш размер SVG правильно, значение по умолчанию preserveAspectRatio
будет делать то, что вы хотите. В частности, значение по умолчанию xMidYMid meet
означает, что:
- Соотношение сторон, описываемое вашим viewBox, будет сохранено при рендеринге.
Для сравнения, значениеnone
допускает неравномерное масштабирование. - viewBox всегда будет
meet
верхним/нижним или левым/правым, а "letterboxing" поддерживает другое измерение внутри.
Для сравнения, значениеslice
гарантирует, что ваш viewBox полностью заполняет рендеринг, либо верхний/нижний, либо левый/правый падают вне SVG. - viewBox будет вертикально и горизонтально центрироваться в окне просмотра SVG.
Для сравнения, значениеxMinYMax
будет удерживать его в нижнем левом углу, с заполнением только справа или сверху.
Вы можете увидеть это здесь: http://jsfiddle.net/Jq3gy/2/
Попробуйте указать явные значения для preserveAspectRatio
в элементе <svg>
и нажмите "Обновить", чтобы увидеть, как они влияют на рендеринг.
Изменить. Я создал упрощенную версию US Map с viewBox (почти половина байтов ) и использовал это в обновленной демоверсии в соответствии с вашими точными потребностями: http://jsfiddle.net/Jq3gy/5/