Должен ли я использовать <img>
, <object>
или <embed>
для загрузки файлов SVG на страницу таким образом , похоже на выгрузку jpg
, gif
или png
?
Какой код для каждого, чтобы он работал как можно лучше? (Я вижу ссылки на включение mimetype или указание на запасные рендеры SVG в моих исследованиях и не вижу хорошего уровня техники).
Предположим, я проверяю поддержку SVG с Modernizr и возвращаюсь (вероятно, делаю замену простым <img>
тегом) для браузеров, не поддерживающих SVG.
html
svg
vector-graphics
artlung
источник
источник
<svg>
можете иметь ссылку на другие SVG. Это может быть достигнуто, например, с помощью<image>
.Ответы:
Я могу порекомендовать SVG Primer (опубликован W3C), который охватывает эту тему: http://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html#SVG_in_HTML
Если вы используете
<object>
то вы получите откат бесплатно: **) Ну, не совсем бесплатно, потому что некоторые браузеры загружают оба ресурса, см. Предложение Ларри ниже о том, как обойти это.
2014 обновление:
Если вам нужен неинтерактивный svg, используйте
<img>
с резервными сценариями версию png (для более старых версий IE и Android <3). Один простой и понятный способ сделать это:<img src="your.svg" onerror="this.src='your.png'">
,Это будет вести себя как изображение GIF, и если ваш браузер поддерживает декларативные анимации (SMIL), они будут воспроизводиться.
Если вы хотите интерактивный svg, используйте либо
<iframe>
или<object>
.Если вам нужно предоставить старым браузерам возможность использовать плагин svg, используйте
<embed>
.Для svg в css
background-image
и аналогичных свойствах modernizr - это один из вариантов переключения на резервные изображения, а другой зависит от нескольких фонов, чтобы сделать это автоматически:Примечание : стратегия с несколькими фонами не работает на Android 2.3, потому что она поддерживает несколько фонов, но не svg.
Дополнительным хорошим чтением является этот пост на svg.
источник
<param name="src" value="your.svg" />
внутрь<object>
тега. Я потратил очень много времени, пытаясь понять, как все это сделать, и я думаю, что наконец-то понял.Начиная с IE9 и выше, вы можете использовать SVG в обычном теге IMG.
https://caniuse.com/svg-img
источник
<img/>
тег, может захотеть узнать об добавлении идентификаторов SVG Fragement , например, "<img src="myimage.svg#svgView(preserveAspectRatio(none))" />
", который позволяет вам управлять соотношением сторонviewBox
и т. Д., Так же, как и с встроенными определениями SVG. Дальнейшее чтение о масштабировании - css-tricks.com/scale-svg<object>
и<embed>
обладают интересным свойством: они позволяют получить ссылку на документ SVG из внешнего документа (с учетом политики того же происхождения). Эту ссылку можно затем использовать для анимации SVG, изменения его таблиц стилей и т. Д.Данный
Затем вы можете делать такие вещи, как
источник
Лучший вариант - использовать SVG Images на разных устройствах :)
источник
onerror
пожары, если SVG не рендерится? какие браузеры вы тестировали?использование
srcset
Большинство современных браузеров поддерживают этот
srcset
атрибут , который позволяет указывать разные изображения для разных пользователей. Например, вы можете использовать его для плотности пикселей 1x и 2x, и браузер выберет правильный файл.В этом случае, если вы укажете SVG в
srcset
браузере, а браузер его не поддерживает, он откатится наsrc
.Этот метод имеет несколько преимуществ по сравнению с другими решениями:
srcset
должны знать, как с этим обращаться, чтобы он загружал только тот файл, который ему нужен.источник
Если вам нужно, чтобы ваши SVG были полностью стилизованы с помощью CSS, они должны быть встроены в DOM. Это может быть достигнуто с помощью внедрения SVG, который использует Javascript для замены элемента HTML (обычно
<img>
элемента) содержимым файла SVG после загрузки страницы.Вот минимальный пример использования SVGInject :
После загрузки изображения
onload="SVGInject(this)
будет запущена инъекция, и<img>
элемент будет заменен содержимым файла, указанного вsrc
атрибуте. Это работает со всеми браузерами, которые поддерживают SVG.Отказ от ответственности: я соавтор SVGInject
источник
Я бы лично использовал
<svg>
тег, потому что, если вы это сделаете, у вас есть полный контроль над ним . Если вы используете его в себе,<img>
вы не сможете управлять внутренностями SVG с помощью CSS и т. Д.Другое дело поддержка браузера .
Просто откройте
svg
файл и вставьте его прямо в шаблон.тогда в вашем CSS вы можете просто, например:
Некоторый ресурс: советы SVG
источник
Если вы используете теги <img> , то браузеры на основе webkit не будут отображать встроенные растровые изображения .
Для любого вида расширенного использования SVG, в том числе встроенных SVG, предлагается наибольшая гибкость.
Internet Explorer и Edge правильно изменят размер SVG , но вы должны указать как высоту, так и ширину.
Вы можете добавить onclick, onmouseover и т. Д. Внутри SVG к любой фигуре в SVG: onmouseover = "top.myfunction (evt);"
Вы также можете использовать веб-шрифты в SVG, включив их в свою обычную таблицу стилей.
Примечание: если вы экспортируете SVG из Illustrator, названия веб-шрифтов будут неправильными. Вы можете исправить это в своем CSS и избежать возни в SVG. Например, Illustrator дает неправильное имя Arial, и вы можете исправить это так:
Все это работает в любом браузере, выпущенном с 2013 года .
Для примера, смотрите ozake.com . Весь сайт сделан из SVG за исключением контактной формы.
Предупреждение. Веб-шрифты изменяются неточно в Safari - и если у вас много переходов от простого текста к жирному или курсиву, в точках перехода может быть небольшое количество лишнего или недостающего пространства. Смотрите мой ответ на этот вопрос для получения дополнительной информации.
источник
img
теге ... Знаете ли вы, если это официально задокументировано?Мои два цента: по состоянию на 2019 год 93% используемых браузеров (и 100% последних двух версий каждой из них) могут обрабатывать SVG в
<img>
элементах:Источник: Могу ли я использовать
Таким образом, мы могли бы сказать, что больше нет причин использовать
<object>
.Однако у него все еще есть свои плюсы :
При проверке (например, с помощью Chrome Dev Tools) вам предоставляется вся разметка SVG на случай, если вы захотите немного подделать ее и увидеть живые изменения.
Он обеспечивает очень надежную реализацию в случае, если ваш браузер не поддерживает SVG (подождите, но каждый из них поддерживает!), Что также работает, если SVG не найден. Это была ключевая особенность спецификации XHTML2, которая похожа на betamax или HD-DVD
Но есть и минусы :
<object>
(хотя это совершенно безопасно использовать его<amp-img>
и использовать его в строке) .<object>
тега может помешать вашей PWA работать в автономном режиме.источник
Нашел одно решение с чистым CSS и без двойной загрузки изображений. Это не красиво, как я хочу, но это работает.
Идея состоит в том, чтобы вставить специальный SVG с резервным стилем.
Более подробную информацию и процесс тестирования вы можете найти в моем блоге .
источник
Эта функция jQuery фиксирует все ошибки в изображениях SVG и заменяет расширение файла альтернативным расширением.
Пожалуйста, откройте консоль, чтобы увидеть ошибку загрузки изображения SVG
источник
Я рекомендую использовать комбинацию
источник
Вы можете вставить SVG косвенно, используя
<img>
HTML-тег, и это возможно в StackOverflow в соответствии с тем, что описано ниже:У меня есть следующий файл SVG на моем ПК
Я загрузил это изображение на https://svgur.com
После завершения загрузки я получил следующий URL:
Затем я вручную (без использования значка IMAGE) добавил следующий тег HTML
и результат чуть ниже
Для пользователя с некоторым сомнением, можно увидеть, что я сделал, редактируя следующий ответ на StackOverflow, вставляя изображение SVG
ЗАМЕЧАНИЕ-1: файл SVG должен содержать
<?xml?>
элемент. Сначала я просто создал файл SVG, который начинается непосредственно с<svg>
тега, и ничего не получалось!ЗАМЕЧАНИЕ-2: в начале я попытался вставить изображение, используя
IMAGE
значокEdit Toolbar
. Я вставляю URL моего SVG-файла, но StackOverflow не принимает этот метод.<img>
Тег должен быть добавлен вручную.Я надеюсь, что этот ответ может помочь другим пользователям.
источник