Подтвердить что ты не робот

Кросс-браузер SVG preserveAspectRatio

Я пытаюсь создать SVG графику внутри тега <img />, который будет соответствовать (без обрезки) внутри тега с сохраненным соотношением сторон. Я создал SVG в Inkscape. Он работал как ожидалось во всех браузерах, кроме Internet Explorer 9.

Чтобы заставить его работать с IE 9, мне пришлось добавить viewBox="0 0 580 220" и preserveAspectRatio="xMidYMid meet" и удалить свойства width="580" и height="220" SVG.

<svg viewBox="0 0 580 220" preserveAspectRatio="xMidYMid meet">...</svg>

Это казалось повсюду, пока я не попробовал его на Webkit, где тег <img /> растягивается вертикально, хотя соотношение сторон SVG действительно сохраняется.

Когда я возвращаю свойства width="580" и height="220", он работает на Webkit, но в IE 9 коэффициент aspectr теряется.

Есть ли кросс-браузерное решение для этого поведения?

4b9b3361

Ответ 1

Похоже, я нашел решение:

Вам нужно сохранить свойства width и height в SVG.

<svg
    width="580"
    height="220"
    viewBox="0 0 580 220"
    preserveAspectRatio="xMidYMid meet"
>...</svg>

Чтобы заставить его работать с IE 9, вам нужно указать хотя бы одно измерение тега <img />.

<img src="your.svg" style="width: 100%" />

Кажется, что он работает повсюду.

Ответ 2

Я решил это, установив следующий CSS:

ширина: 100%; max-width: (желаемая ширина в px)

Ответ 3

Решение в моем случае использовало ответ Питера Худека, но из-за использования width: 100%; в теге <img />, который разбил макет на каждом браузере, отличном от IE9, я добавил только CSS-хаус IE9 (width: 100%\9\0;). Надеюсь, это дополнение поможет кому-то.: -)

Даже использование preserveAspectRatio="xMidYMid meet" не обязательно.

(Я хотел добавить только комментарий, а не отвечать, но пока нет репутаций: -)

Ответ 4

Просто подумал, что добавлю, как я вступил в решение. Сначала мне не удалось выяснить некоторые проблемы.

  • Отредактируйте свой SVG файл, чтобы удалить жестко заданные атрибуты высоты и ширины. (с простым текстовым редактором)
  • Примените ширину: 100% css к вашему svg-образу, чтобы IE отображал его как другие браузеры. (размером с контейнер)
  • Используйте css на контейнере изображений для получения согласованных результатов!

Я сделал страницу, чтобы описать ее более подробно на http://ivantown.com/posts/svg-scaling-with-ie/