Chrome не отображает SVG, на который ссылается тег <img>

95

У меня возникли проблемы с тем, что Google Chrome не отображает svg с тегом img. Это происходит при обновлении страницы и начальной загрузке страницы. Я могу заставить изображение появиться, выполнив «Проверка элемента», затем щелкнув файл svg правой кнопкой мыши и открыв файл svg на новой вкладке. Затем изображение svg будет отображено на исходной странице.

<img src="../images/Aged-Brass.svg">

Совершенно не понимаю, в чем проблема. Изображение svg отлично отображается в IE9 и FF, но не в Chrome или Safari.

У меня также установлены типы MIME. (изображение / svg + xml)

РЕДАКТИРОВАТЬ: Вот простая страница html, которую я создал, чтобы проиллюстрировать мою проблему.

<!DOCTYPE html>
<html>
<head>
    <title>SVG Test</title>

    <style>
        #BackgroundImage{
            background: url('../images/Aged-Brass.svg') no-repeat scroll left top;
            width: 400px;
            height: 600px;
        }

        #ImageTag{
            width: 400px;
            height: 600px;
            margin: 0px;
            padding: 0px;
        }
    </style>
</head>
<body>
    <div id="ImageTag">
        <img src="../images/Aged-Brass.svg">
    </div>
    <div id="BackgroundImage"></div>
</body>
</html>

Как видите, я пытаюсь использовать файл svg как в теге img, так и в css в качестве фонового изображения. Ни одна из них не работает при начальной загрузке страницы в хроме или сафари. Когда я проверяю элемент, щелкните правой кнопкой мыши svg или щелкните ссылку для загрузки svg в другом окне, файл svg отобразится на исходной вкладке.

Джейсон Ван Вурен
источник
1
Можете ли вы разместить здесь пример или пример кода?
Sirko
Нам действительно нужно иметь возможность увидеть и воспроизвести это сами, если вам нужна помощь.
Phrogz
Может быть, ваш "Aged-Brass.svg" содержал встроенное изображение? У меня была та же проблема, и я отследил ее до ...
МакГарнагл

Ответы:

125

Простой и легкий способ; согласно https://css-tricks.com/forums/topic/svg-css-background-image-not-showing-in-chrome/ Вам необходимо открыть файл .SVG с помощью текстового редактора (например, блокнота) и изменить

xlink:href="data:img/png;base64,

кому:

xlink:href="data:image/png;base64,

у меня это сработало!

Шариф Яздиан
источник
9
Это рабочее решение. Я столкнулся с этой проблемой при экспорте умного векторного объекта как SVG с помощью Photoshop.
Михаил
10
Это спасло жизнь, я часами пытался понять, в чем проблема. Спасибо!!
mhodges
2
Точно так же это решило мою проблему, а также потратил много времени, пытаясь выяснить, почему изображение не отображается.
MrEvers
3
У меня не было этой строки кода в файле SVG, и добавление ее в тег <svg> для меня ничего не дало.
Пит,
2
Это должно быть далеко наверху. Ты спас мне день.
Маттиа Расуло
42

Тегу svg необходим атрибут пространства имен xmlns:

<svg xmlns="http://www.w3.org/2000/svg"></svg>
удар
источник
Этот. И мне пришлось загрузить его как фоновое изображение div.
Кейси
1
SVG по-прежнему нуждается в пространстве имен. Просто убедитесь, что он определен в файле SVG, который вы используете в качестве фона.
взрыва
30

Я пришел сюда, потому что у меня была такая же проблема: когда я проверяю элемент, я вижу файл, но на сайте я не могу (даже при использовании localhost)

ответ на мою проблему заключался в сохранении файла SVG. Если вы сохранили его из иллюстратора, убедитесь, что вы нажали «встроить», а не «ссылку». поскольку ссылка будет просто ссылаться на ваши локальные файлы, а не включать данные (если я правильно понимаю). введите описание изображения здесь

Я прочитал об этом на веб-сайте Adobe, на котором есть еще несколько полезных советов по экспорту http://www.adobe.com/inspire/2013/09/exporting-svg-illustrator.html

Это сработало для меня, надеюсь, это было полезно.

Мята валлийский
источник
1
Кто-нибудь знает, есть ли способ сделать это с помощью смарт-объекта в Photoshop? Открытие иллюстратора и повторный экспорт с этой опцией в иллюстраторе было единственным, что позволило мне показать svgs в Chrome после нескольких попыток других исправлений.
Alex Podworny
2
Как этот параметр влияет на фактический код SVG?
Янис Элмерис
19

Я пришел сюда, потому что у меня была аналогичная проблема, изображение не рендерилось. Я обнаружил, что заголовок типа контента моего тестового сервера был неправильным. Я исправил это, добавив в свой файл .htaccess следующее:

AddType image/svg+xml svg svgz
AddEncoding gzip svgz
user87312
источник
1
Спасибо. Установка Content-Type на image / svg + xml исправила это.
samir105
Обратите внимание, что image/svgпредлагаемый файл для скачивания, он должен иметь +xml.
Якуб Врана,
10

<object>Вместо этого используйте (конечно, замените каждый URL своим собственным):

.BackgroundImage {
        background: url('https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg') no-repeat scroll left top;
        width: 400px;
        height: 600px;
}
<!DOCTYPE html>
<html>
<head>
    <title>SVG Test</title>
</head>
<body>
    <div id="ObjectTag">
        <object type="image/svg+xml" data="https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg" width="400" height="600">
          Your browser does not support SVG.
        </object>
    </div>
    <div class="BackgroundImage"></div>
</body>
</html>

Эссем
источник
6

Добавление атрибута ширины в тег [svg] (путем редактирования исходного XML-кода svg) сработало для меня: например:

<!-- This didn't render -->
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
...  
</svg>

<!-- This did -->
<svg version="1.1" baseProfile="full" width="1000" xmlns="http://www.w3.org/2000/svg">
...  
</svg>
Сайлас Палмер
источник
3

Я смог использовать ваш образец для создания тестовой страницы, и она отлично сработала. Я предполагаю, что с вашим файлом svg что-то не так. Можете вы это вставить и сюда? Вот образец, который я использовал.

 <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
   <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
   <g>
      <title>Layer 1</title>
      <ellipse ry="30" rx="30" id="svg_1" cy="50" cx="50" stroke-width="5" stroke="#000000" fill="#FF0000"/>
   </g>
 </svg>
ОтдыхающийРобот
источник
3

похоже на ошибку Chrome, я сделал что-то еще, так как чуть не сошел с ума из-за этого ... с помощью отладчика Chrom, если вы измените css объекта svg, который он показывает на экране.

Итак, что я сделал, было: 1. проверить размер экрана 2. прослушать событие "load" моего объекта SVG 3. когда элемент загружен, я изменил его css с помощью jQuery 4. это помогло мне

if (jQuery(window).width() < 769) {

  jQuery('object#mysvg-logo')[0].addEventListener('load', function() {
       jQuery("object#mysvg-logo").css('width','181px');
  }, true);

}
width: 180px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<object id="mysvg-logo" type="image/svg+xml" data="my svg logo url here">Your browser does not support SVG</object>

Йоси Бен-давид
источник
2

У меня была аналогичная проблема, и существующие ответы на нее либо неприменимы, либо работали, но мы не могли их использовать по другим причинам. Поэтому мне пришлось выяснить, что не нравится Chrome в наших SVG.

В нашем случае оказалось, что в idатрибуте symbolтега в файле SVG есть a :, что не понравилось Chrome. Вскоре, когда я удалил, :все заработало.

Плохой:

<svg
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 72">
    <defs>
        <symbol id="ThisIDHasAColon:AndChromeDoesNotLikeIt">
        ...
        </symbol>
    </defs>
    <use
        ....
        xlink:href="#ThisIDHasAColon:AndChromeDoesNotLikeIt"
    />
</svg>

Хороший:

<svg
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 72">
    <defs>
        <symbol id="NoMoreColon">
        ...
        </symbol>
    </defs>
    <use
        ....
        xlink:href="#NoMoreColon"
    />
</svg>
Майк Уиллис
источник
2

.svgизображение не имеет исходной высоты и ширины. Поэтому этого не видно. Вы должны это установить.

Вы можете сделать это как в строке, так и в файле css:

В соответствии:

<img src="../images/Aged-Brass.svg" class="image" alt="logo" style="width: 100px; height: 50px;">

Css файл:

<img src="../images/Aged-Brass.svg" class="image" alt="logo">
.image {
    width: 100px;
    height: 50px;
}
Кшиштоф Янишевский
источник
2

В моем случае эта проблема не исчезла, когда я создал и сохранил SVG с помощью Photoshop. Что помогло, так это открытие файла с помощью Illustrator и последующий экспорт svg.

Нильс Ванхоренбек
источник
Что изменилось в реальном коде SVG? Я не использую ни Photoshop, ни Illustrator, мне нужно исправить существующий файл SVG.
Янис Элмерис
В этом случае попробуйте ответить @Sharif!
Маттиа Расуло
1

Сначала я экспортировал свой svg из Photoshop CC, и мне пришлось вручную добавить

version="1.1"в <svg>тег

чтобы он отображался на хроме.

Энди Нгуен
источник
1

Тип содержимого в HTTP-заголовке с сервера был для меня проблемой. У меня есть сервер node.js, добавлен:

if( pageName.substring(pageName.lastIndexOf('.')) == '.svg' ) {
  res.writeHead(200, { "Content-Type": "image/svg+xml" });
}

pageName - это моя локальная переменная для того, что запрашивается.

Думаю, это обычная проблема! Я использую текущую версию Chrome (март 2020 г.).

Бадман Гудман
источник
0

Была такая же проблема. Если сервер настроен правильно и .htacces не является ответом, возможно, вы захотите посмотреть исходный код svg, который вы встраиваете. Мои были созданы с помощью текстового редактора, хорошо отображались в Chrome и Safari внутри кода html5, после встраивания ничего не было видно. Добавлена ​​правильная версия, размеры и т. Д. В код svg и работает как шарм. Кроме того, все стили встроены.

Т.е.

<svg version="1.1" baseProfile="full" width="24" height="24" xmlns="http://www.w3.org/2000/svg"> 
  <rect x="0" y="0" rx="2" ry="2" width="24" height="24" style="fill:#fbc800;width:24px;height:24px;"  />  
</svg>
Уку
источник
0

У меня такая же проблема с хромом, после добавления DOCTYPEон работает должным образом

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

Перед

    <?xml version="1.0" encoding="iso-8859-1"?>
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="792px" height="792px" viewBox="0 0 792 792" style="enable-background:new 0 0 792 792;" xml:space="preserve">
    <g fill="none" stroke="black" stroke-width="15">
  ......
  ......
  .......
  </g>
</svg>

После

    <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="792px" height="792px" viewBox="0 0 792 792" style="enable-background:new 0 0 792 792;" xml:space="preserve">
    <g fill="none" stroke="black" stroke-width="15">
  ......
  ......
  .......
  </g>
</svg>
Мадан Бхандари
источник
В чем разница между этими двумя фрагментами кода? Я этого не вижу.
rgilligan
@rgilligan, мой плохой, первый должен был быть без doctype
Мадан Бхандари
0

Будьте осторожны, чтобы у вас нет свойства перехода css для ваших изображений svg

Я не знаю, почему, но если вы сделаете: "transition: all easy 0.3s" для изображения svg в Chrome, изображения не появятся.

например:

* {
   transition: all ease 0.3s
  }

Chrome не отображает svg.

Удалите все свойства перехода css и повторите попытку.

Wilo087
источник
0

При возникновении проблем попробуйте сначала открыть изображения с помощью программы, способной читать svg-изображения.
Если это не удается, значит, svg-образ каким-то образом поврежден.

У меня был этот случай, и я скопировал svg-paths в новое svg-изображение и настроил все детали svg-тегов.

Я никогда не проверял причину, по которой это не рендеринг, но предполагаю, что какие-то невидимые специальные знаки вызвали ошибку рендеринга. Иногда редактируя файлы на Mac, у меня уже была эта проблема в другом контексте.

Дэвид
источник
0

У меня была такая же проблема с изображением SVG, включенным через тег IMG. Для меня оказалось, что Chrome не любит, когда прямо в верхней части файла есть пустая строка.

Я удалил пустую строку, и мой SVG сразу начал рендеринг.

pwbred
источник
0

Я убеждаюсь, что добавляю стиль изображения . Это сработало для меня

style= "width:320; height:240"

Pensebien
источник
0
Just replace <img> tag to <object> tag for SVG image.

<object data="assets/twitter-wrap.svg" type="image/svg+xml"></object>
Джей Супеда
источник