Вы также можете посмотреть здесь: https://gist.github.com/larrybotha/7881691 - это продолжение этой «истории».
Исправление SVG в <img>
тегах, не масштабируемых в IE9, IE10, IE11
IE9, IE10 и IE11 неправильно масштабируют файлы SVG, добавленные с тегами img
, когда указаны атрибуты viewBox
, width
и height
. Просмотрите эту кодовую ручку в разных браузерах.
Высота изображения не будет масштабироваться, когда изображения внутри контейнеров уже, чем ширина изображения. Это можно решить двумя способами.
Используйте sed
в bash для удаления атрибутов ширины и высоты в файлах SVG
Согласно этому ответу в Stackoverflow проблему можно решить, удалив только атрибуты width
и height
.
Этот небольшой скрипт рекурсивно ищет SVG-файлы в вашем текущем рабочем каталоге и удаляет атрибуты для кросс-браузерной совместимости:
find ./ -name '*.svg' -print0 | xargs -0 sed -i "" -e 's/width="[0-9]*\.*\[0-9]*" //' -e 's/height="[0-9]*\.*\[0-9]*" //'
Предостережения
Удаление атрибутов width и height заставит изображение занимать всю ширину своего контейнера в браузерах, отличных от IE.
IE10 (другие браузеры требуют тестирования) уменьшит изображения до некоторого произвольного размера - это означает, что вам нужно будет добавить width: 100%
к вашему CSS, чтобы эти изображения соответствовали их контейнерам.
Целевой IE с CSS
Поскольку вышеприведенное решение в любом случае требует CSS, мы могли бы также использовать хак, чтобы заставить IE вести себя, и не беспокоиться о необходимости управлять каждым отдельным SVG-файлом.
Следующее будет предназначаться для всех тегов img
, содержащих файл SVG, в IE6 + (однако, только IE9 + поддерживает файлы SVG).
/*
* Let's target IE to respect aspect ratios and sizes for img tags containing SVG files
*
* [1] IE9
* [2] IE10+
*/
/* 1 */
.ie9 img[src*=".svg"] {
width: 100%;
}
/* 2 */
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
img[src*=".svg"] {
width: 100%;
}
}
Предостережения
Это предназначается для каждого тега img
, содержащего ".svg" в IE9, IE10 и IE11 - если вы не хотите, чтобы это поведение было на определенном изображении, вам придется добавить класс, чтобы переопределить это поведение для этого изображения.