Как в html поместить иконку SVG?

166
18 января 2020, 12:30

Не отображает иконку SVG. Если задать bacgkround-image, то иконка отображается (т.е. путь указан правильно). Как правильно прописать ее в HTML? Или кто подскажет другой способ? Иконку взяла с material design icons, в Angular Material подходящей нет. Доступ по url иконки не подходит, она должна храниться локально

    <button> 
      <img src="../images/icons/arrow-decision-auto.svg"> 
    </button>

Код иконки

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="2em" height="2em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path d="M12 5H9l4-4 4 4h-3v4.43a8.638 8.638 0 0 0-2 1.69V5zm-1.6 10H8.5l-.7-2H4.6l-.7 2H2l3.2-9h2l3.2 9zm-3.05-3.35L6.2 8l-1.15 3.65h2.3zM23 11l-4-4v3a6.75 6.75 0 0 0-7 6.17 3 3 0 1 0 2 0c.47-4 4.47-4.2 4.95-4.2v3L23 11z" /></svg>

Answer 1

Добавил скаченную иконку на сервер и загрузил её в HTML с помощью <img>

<button> 
      <img src="https://svg-art.ru/files/arrow-decision-auto.svg"> 
 </button>

Значит у вас проблемы с путём до файла *.svg

Но в случае добавления иконки с помощью <img> она ведёт себя как обыкновенное изображение, поэтому затруднительно сделать стилизацию обычными приемами с помощью CSS.

Пока нет достаточного опыта работы с SVG, используйте инлайновый способ добавления иконки.

Удалил из кода иконки fill="#626262" чтобы не мешало стилизации иконки

.btn { 
fill:dodgerblue; 
transition:fill 0.5s ease; 
} 
.btn:hover { 
fill:crimson; 
}
<button class="btn"> 
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="2em" height="2em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path d="M12 5H9l4-4 4 4h-3v4.43a8.638 8.638 0 0 0-2 1.69V5zm-1.6 10H8.5l-.7-2H4.6l-.7 2H2l3.2-9h2l3.2 9zm-3.05-3.35L6.2 8l-1.15 3.65h2.3zM23 11l-4-4v3a6.75 6.75 0 0 0-7 6.17 3 3 0 1 0 2 0c.47-4 4.47-4.2 4.95-4.2v3L23 11z" /></svg> 
</button>

Ещё способ добавить svg иконки

Данная техника подойдет, если нужно быстро добавить иконки в свой проект, которые можно раскрасить в любой цвет из внешнего файла CSS.
Причём иконки высокого качества, практически полный набор на все случаи.
Иконки адаптивны и не теряют качества при масштабировании, так как это иконки SVG из которых состоит символьный шрифт - Google Material Icons

Подключение шрифта:

<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
      rel="stylesheet">

Выбирать иконки по названиям можно здесь

Выбираем нужную иконку с именем - favorite

Подключение иконки к HTML странице:

<i class="material-icons red">favorite</i>, где

material-icons - общий класс для всех иконок
red - дополнительный класс, задающий цвет окраски иконки

Ниже пример с тремя одинаковыми иконками, которые раскрашены в разные цвета Добавлена анимация увеличения иконок при hover.

.material-icons { 
transform: scale(2); 
} 
i { 
  margin: 100px 50px 50px 80px; 
  transition: transform 0.5s ease-in-out; 
} 
i:hover { 
  transform: scale(4); 
} 
 
.red{color:red} 
.green{color:yellowgreen} 
.blue{color: dodgerblue}
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" 
      rel="stylesheet">         
<i class="material-icons red">favorite</i> 
<i class="material-icons green">android</i>  
<i class="material-icons blue">backup</i>

Размер иконок также можно менять, здесь удвоенный исходный размер:

.material-icons {
transform: scale(2);
}
Answer 2

Если задать bacgkround-image, то иконка отображается (т.е. путь указан правильно).

Если с путями к иконке всё действительно ОК, но не получается загрузить иконку svg с помощью <img>, то возможно у вас на локальном ПК или например: в Wordpress не указан MIME type для svg ⇒ image/svg+xml

  • Для Wordpress можно установить плагин, который всё сделает за вас и при этом не придется добавлять вручную MIME type, как описано ниже.
  • Если плагин не помог или не хочется использовать плагины, то можно добавить MIME type в ручную:

1. Добавляете в файл functions.php

function wpcontent_svg_mime_type( $mimes = array() ) {
  $mimes['svg']  = 'image/svg+xml';
  $mimes['svgz'] = 'image/svg+xml';
  return $mimes;
}
add_filter( 'upload_mimes', 'wpcontent_svg_mime_type' );   

Вы заменяте wpcontent_ своим собственным пространством имен. Эта функция просто добавляет SVG и SVGZ (сжатый SVG) к разрешенным типам загружаемых файлов в WordPress и подключается к функции WordPress upload_mimes().

2. Добавление SVG Mime Types в .htaccess

Откройте ваш корневой файл .htaccess и добавьте следующее после строки: #End WordPress.

# Add SVG Mime Types
AddType image/svg+xml svg
AddType image/svg+xml svgz       

Сохраните файл, и все готово! Теперь вы можете сохранять SVG из Illustrator или Inkscape и использовать их на своем сайте WordPress.

Источник

Файл .htaccess обычно расположен в корне диска C: Если на вашем ПК его нет, то можно его скачать здесь

Вот содержание этого файла по умолчанию

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
READ ALSO
псевдоклас child

псевдоклас child

применяю псевдоклас child, почему-то значения цвет не применяется: html

153
Описание плагина jQuery

Описание плагина jQuery

На TypeScript делаю реализацию плагина

127
Изменение html кода внутри jQuery

Изменение html кода внутри jQuery

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

130
Как добавить поле процент в rangeSlider?

Как добавить поле процент в rangeSlider?

Создаю новое поле в rangeSlider но из за не знания "как это сделать" столкнулся с проблемой Вот попытка :

153