HTML
<img src="logo.svg" alt="Logo" class="logo-img">
CSS
.logo-img path {
fill: #000;
}
Приведенный выше svg загружается и изначально, fill: #fff
но когда я использую приведенное выше, css
чтобы попытаться изменить его на черный, он не меняется, я впервые играю с SVG, и я не уверен, почему он не работает.
Ответы:
Если ваша цель - просто изменить цвет логотипа, и вам не обязательно использовать CSS, то не используйте javascript или jquery, как предлагалось в предыдущих ответах.
Чтобы точно ответить на оригинальный вопрос, просто:
Откройте
logo.svg
в текстовом редакторе.найдите
fill: #fff
и замените егоfill: #000
Например, вы
logo.svg
можете выглядеть так при открытии в текстовом редакторе:... просто измените заполнение и сохраните.
источник
path
илиcircle
элементы, как<path fill="#777777" d="m129.774,74.409c-5.523,...
.fill="currentColor"
затемcolor
на родительском элементе css-tricks.com/cascading-svg-fill-colorВы можете установить свой SVG в качестве маски. Таким образом, установка цвета фона будет действовать как цвет заливки.
HTML
CSS
JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/
MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
Проверьте, поддерживает ли ваш браузер эту функцию: https://caniuse.com/#search=mask
источник
mask
оinvalid property value
. Я тестирую это в Chrome.Попробуйте чистый CSS:
больше информации в этой статье https://blog.union.io/code/2017/08/10/img-svg-fill/
источник
2018: если вы хотите динамический цвет, не хотите использовать javascript и не хотите встроенный SVG, используйте переменную CSS. Работает в Chrome, Firefox и Safari. редактировать: и край
В вашем SVG заменить все экземпляры
style="fill: #000"
сstyle="fill: var(--color_fill)"
.источник
"This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped"
xlink:href
не рекомендуется в пользуhref
. Так что это все еще может работать.Сначала вам нужно внедрить SVG в HTML DOM.
Существует библиотека с открытым исходным кодом под названием SVGInject, которая делает это за вас. Он использует
onload
атрибут для запуска инъекции.Вот минимальный пример использования SVGInject:
После загрузки изображения
onload="SVGInject(this)
будет инициировано внедрение, и<img>
элемент будет заменен содержимым файла SVG, предоставленного вsrc
атрибуте.Это решает несколько проблем с инъекцией SVG:
SVG могут быть скрыты до завершения инъекции. Это важно, если стиль уже применяется во время загрузки, что в противном случае могло бы вызвать краткую «флэш-память без стиля».
Эти
<img>
элементы вводят себя автоматически. Если вы добавляете SVG динамически, вам не нужно беспокоиться о повторном вызове функции инъекции.Случайная строка добавляется к каждому идентификатору в SVG, чтобы избежать многократного использования одного и того же идентификатора в документе, если SVG вводится более одного раза.
SVGInject представляет собой простой Javascript и работает со всеми браузерами, поддерживающими SVG.
Отказ от ответственности: я соавтор SVGInject
источник
Ответ от @Praveen твердый.
Я не мог заставить его отвечать в моей работе, поэтому я сделал для него функцию наведения jquery.
CSS
JS / JQuery
источник
Почему бы не создать веб-шрифт с вашим изображением или изображениями SVG, импортировать веб-шрифт в CSS, а затем просто изменить цвет глифа с помощью атрибута цвета CSS? Нет необходимости в JavaScript
источник
Этот ответ основан на ответе https://stackoverflow.com/a/24933495/3890888, но с простой версией JavaScript используемого сценария.
Вы должны сделать SVG встроенным SVG . Вы можете использовать этот скрипт, добавив класс
svg
к изображению:И тогда, теперь, если вы делаете:
Или, может быть:
JSFiddle: http://jsfiddle.net/erxu0dzz/1/
источник
parser.parseFromString(text, "image/svg+xml");
fetch
которого было добавлено в Safari в 10.1 ( developer.mozilla.org/en-US/docs/Web/API/Fetch_API ). Версия jQuery выше работает.Используйте фильтры для преобразования в любой цвет.
Я недавно нашел это решение и надеюсь, что кто-нибудь сможет его использовать. Поскольку в решении используются фильтры, его можно использовать с любым типом изображения. Не только SVG.
Если у вас есть одноцветное изображение, цвет которого вы просто хотите изменить, вы можете сделать это с помощью некоторых фильтров. Конечно, он работает и на многоцветных изображениях, но вы не можете выбрать определенный цвет. Только весь образ.
Фильтры взяты из сценария, предложенного в разделе Как преобразовать черный в любой заданный цвет, используя только фильтры CSS. Если вы хотите изменить белый цвет на любой, вы можете настроить значение инвертирования в каждом фильтре.
источник
Если вы просто переключаете изображение между реальным цветом и черно-белым, вы можете установить один селектор как:
{Фильтр: нет;}
а другой как:
источник
Чтобы расширить ответ @gringo, метод Javascript, описанный в других ответах, работает, но требует, чтобы пользователь загружал ненужные файлы изображений, а IMO - раздувает ваш код.
Я думаю, что лучшим подходом было бы перенести всю одноцветную векторную графику в файл веб-шрифта. В прошлом я использовал Fort Awesome , и он прекрасно работает для объединения пользовательских значков / изображений в формате SVG вместе с любыми сторонними значками, которые вы можете использовать (Font Awesome, Bootstrap icons и т. Д.), В один файл веб-шрифта. пользователь должен скачать. Вы также можете настроить его, чтобы вы включали только сторонние значки, которые вы используете. Это уменьшает количество запросов, которые должна сделать страница, и ваш общий вес страницы, особенно если вы уже включили какие-либо сторонние библиотеки значков.
Если вы предпочитаете более ориентированный на dev вариант, вы можете использовать Google «npm svg webfont» и использовать один из узловых модулей, наиболее подходящий для вашей среды.
После того, как вы сделали любой из этих двух вариантов, вы можете легко изменить цвет с помощью CSS, и, скорее всего, вы ускорили свой сайт в процессе.
источник
Просто..
Вы можете использовать этот код:
Сначала укажите путь к svg, а затем напишите его ID, в данном случае «Capa_1». Вы можете получить идентификатор SVG, открыв его в любом редакторе.
В css:
источник
Основная проблема в вашем случае заключается в том, что вы импортируете svg из
<img>
тега, который скрывает структуру SVG.Вам нужно использовать
<svg>
тег вместе с,<use>
чтобы получить желаемый эффект. Чтобы это сработало, вам нужно указатьid
путь, который вы хотите использовать в файле SVG,<path id='myName'...>
чтобы затем получить их из<use xlink:href="#myName"/>
тега. Попробуйте разрезать ниже.Показать фрагмент кода
Обратите внимание, что вы можете поместить любой URL перед фрагментом,
#
если вы хотите загрузить SVG из внешнего источника (а не встраивать его в ваш HTML). Также обычно вы не указываете заливку в CSS. Лучше рассмотреть возможность использованияfill:"currentColor"
в самом SVG. Затем будет использовано значение цвета соответствующего элемента CSS.источник
Поскольку SVG - это в основном код, вам нужно просто содержимое. Я использовал PHP для получения контента, но вы можете использовать все, что захотите.
Затем я напечатал содержимое "как есть" внутри контейнера div
Чтобы окончательно установить правило для SVG-потомков контейнера на CSS
Я получил этот результат с иконкой материала SVG:
Mozilla Firefox 59.0.2 (64-разрядная версия) Linux
Google Chrome66.0.3359.181 (сборка официальная) (64 бит) Linux
Опера 53.0.2907.37 Linux
источник
Это может быть полезно для людей, использующих
PHP
в сочетании с.svg
изображениями, которыми они хотят манипулировать с помощью CSS.Вы не можете перезаписать свойства внутри тега img с помощью CSS. Но когда исходный код SVG встроен в HTML, вы, безусловно, можете. Мне нравится решать эту проблему с помощью
require_once
функции, в которую я включаю.svg.php
файл. Это похоже на импорт изображения, но вы все равно можете переписать стили с помощью CSS!Сначала включите файл SVG:
И это включает в себя этот значок, например:
Теперь мы можем легко изменить цвет заливки с помощью CSS:
Сначала я попытался решить эту проблему,
file_get_contents()
но решение выше гораздо быстрее.источник
Знайте, это старый вопрос, но недавно мы столкнулись с той же проблемой и решили ее со стороны сервера. Это конкретный ответ php, но я уверен, что другие envs имеют что-то похожее. вместо использования тега img вы визуализируете svg как svg с самого начала.
теперь при рендеринге файла вы получите полный встроенный svg
источник
откройте значок svg в редакторе кода и добавьте класс после тега path:
Вы можете добавить класс в SVG и изменить цвет следующим образом:
codepen
источник
Если у вас есть доступ к JQuery, то в ответ на ответ Правина можно программно изменить цвет различных вложенных элементов в SVG:
$('svg').find('path, text').css('fill', '#ffffff');
В рамках find вы можете упомянуть различные элементы, которые нужно изменить в цвете.
источник