Поддержка браузера .SVG - PullRequest
       3

Поддержка браузера .SVG

60 голосов
/ 19 января 2012

Я работаю над адаптивным дизайном и думаю о создании значков навигации в виде файлов .svg.Какова текущая поддержка браузера и есть ли обходной путь / плагин для более старых версий браузера?

Ответы [ 10 ]

52 голосов
/ 19 января 2012

Все основные браузеры поддерживают годами, кроме <= IE8.Обходным решением может быть, например, RaphaelJS. </p>

Источники:

33 голосов
/ 14 февраля 2013

Спецификация SVG обширна, и ни один браузер в настоящее время не поддерживает всю спецификацию.При этом все последние версии всех основных браузеров имеют basic SVG .Поскольку ни один из них не имеет полной поддержки, вам необходимо проверить отдельные функции в каждом браузере, на который вы ориентируетесь.Если вы рисуете только базовые фигуры и не используете более продвинутые функции (такие как фильтры, анимация и т. Д.), У вас, скорее всего, не возникнет никаких проблем.

Полная матрица совместимости браузера приведена здесь .

Обходной путь для старых версий IE заключается в использовании VML .Если требуется поддержка IE6, и вы рисуете с кодом, Raphael.js выполнит эту проверку совместимости для вас и выполнит визуализацию с использованием VML или SVG, когда это необходимо.Но если вы загружаете необработанный файл SVG и используете его в качестве источника изображения, который не будет работать.

Еще один вариант для старых браузеров - использовать JavaScript-библиотеку canvg .Это чистый SVG-анализатор JavaScript, который выводит полученное изображение на холст, но это может быть излишним.

12 голосов
/ 06 августа 2015

... или вы можете разрешить серверу apache работать с ним:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} MSIE\s[5-8]\.
RewriteCond %{REQUEST_FILENAME} ^.+?\.svg$
RewriteRule ^(.+?)\.(?:svg)$ $1\.png [L]

вам нужно только создавать версии .png каждого файла .svg, и не имеет значения, предназначен ли файл для cssфон или для тега img.

9 голосов
/ 20 июля 2014

отредактировано: Я имел обыкновение ссылаться на очень хорошую таблицу сравнения SVG, но она не обновлялась с 2011 года, поэтому она больше не актуальна.

7 голосов
/ 20 января 2012

Стоит отметить, что если вам нужна поддержка <= IE8, вы можете достаточно легко внедрить GoogleChromeFrame, чтобы получить искомую поддержку SVG ... </p>

Хотя вы можете обнаружить, что у каждого браузера есть своймаленькие причуды в отношении особенностей спец.У меня были проблемы с динамически создаваемыми узлами, которые используют фильтры, и animateMotion слишком долго оставался ошибкой в ​​Google Chrome ... (по этой причине мы используем FF5 + в качестве наших интерактивных интерфейсов, Safari тоже становится лучше)

IMO, если только все приложение не является SVG, я бы просто использовал PNG для ваших иконок, если вы не хотите, чтобы они хорошо масштабировались!:)

... но если вы просто хотите поиграть с SVG, Giv'er!;)

5 голосов
/ 22 января 2016

¡С элементом объекта!

<object data="example.svg" type="image/svg+xml">
     <!-- If browser don't soport / don't find SVG  -->
     <img src="example.png" alt="Logotype" />
</object>
3 голосов
/ 02 октября 2014

Если я работаю с <img> элементами (в отличие от фоновых изображений CSS), я использую удобный обходной путь, комбинацию Modernizr (библиотека JavaScript, которая обнаруживает наличие определенных функций,, такие как поддержка .svg, в браузерах) и несколько строк jQuery:

$(".no-svg img").each(function() {
    var $this = $(this);
    if ($this.attr("src").indexOf(".svg") > -1) {
        var isSvg = $this.attr("src").toString();
        var isPng = isSvg.replace(".svg", ".png");
        $this.attr("src", isPng);
    }
});

1) Я создаю .png версии каждого файла .svg.2) Modernizr присваивает элементу html класс .no-svg, если обнаруживает отсутствие поддержки .svg.3) JQuery меняет расширения файлов..indexOf(".svg") проверяет, содержится ли строка ".svg" в значении src, возвращая -1, если она не находит, и положительное целое число, если это так.Если он находит ".svg", вся строка src перетягивается в isSvg, а .replace() заменяет .svg на .png и сохраняет результат как isPng, который затем устанавливается как значение src.

3 голосов
/ 05 октября 2012

Вы также можете использовать SVG в целом для всех изображений. Таким образом, вы сможете охватить все сетчатки на iDevices. Другие устройства будут следовать рано или поздно.

Для браузеров, которые не поддерживают svg, вы можете присвоить телу класс 'no-svg'.

В вашем CSS просто добавьте '.no-svg .yourimageclass' и поместите вместо него png. (Переопределите его)

Boilerplate HTML5 дает вам класс no-svg уже по умолчанию с некоторой магией javascript. (например, для IE8)

0 голосов
/ 16 июня 2016

Вы можете использовать скрипт caniuse.js , чтобы определить, поддерживает ли ваш браузер SVG или нет:

caniuse.svg()
0 голосов
/ 26 марта 2013

Для фоновых изображений вот простой способ вернуться к фонам PNG для старых браузеров:

http://signaltower.co/2013/02/25/add-png-fallbacks-for-svg-files/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...