Изменение цвета svg
Я хочу использовать эту технику http://css-tricks.com/svg-fallbacks/ и изменить цвет svg, но до сих пор я не смог этого сделать. Я положил это в css, но мое изображение всегда черное, несмотря ни на что. Мой код:
<svg>
<image class="change-my-color" xlink:href="https://dl.dropboxusercontent.com/u/13823768/tumblr/iconmonstr-time-3-icon.svg" width="96" height="96" src="ppngfallback.png" />
</svg>
и css
.change-my-color {
fill: green;
}
на jsfiddle: http://jsfiddle.net/Kk93M/
8 ответов:
вы не можете изменить цвет изображения таким образом. Если вы загружаете SVG как изображение, вы не можете изменить способ его отображения с помощью CSS или Javascript в браузере.
если вы хотите изменить свой образ SVG, вы должны загрузить его с помощью
<object>
,<iframe>
или через<svg>
inline.если вы хотите использовать методы на странице, вам нужна библиотека Modernizr, где вы можете проверить поддержку SVG и условно отобразить или не отображать резервное изображение. Затем вы можете встроить ваш SVG и применить стили, которые вам нужны.
см.http://jsfiddle.net/helderdarocha/6uRgS/
вы можете встроить свой SVG, пометить свое резервное изображение именем класса (
my-svg-alternate
):<svg width="96px" height="96px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve"> <path id="time-3-icon" .../> </svg> <image class="my-svg-alternate" width="96" height="96" src="ppngfallback.png" />
а в CSS используйте
no-svg
класс от Modernizr (CDN:http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.7.2.js) для проверки поддержки SVG. Если поддержка SVG отсутствует, блок SVG будет проигнорирован, и изображение будет отображено, в противном случае изображение будет удалено из дерева дом (display: none
):.my-svg-alternate { display: none; } .no-svg .my-svg-alternate { display: block; width: 100px; height: 100px; background-image: url(image.png); }
затем вы можете изменить цвет вашего встроенного элемента:
#time-3-icon { fill: green; }
чтобы изменить цвет любого SVG, вы можете напрямую изменить код svg на открытие файла svg в любом текстовом редакторе. Код может выглядеть следующим образом
<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!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="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve"> <g> <path d="M114.26,436.584L99.023,483h301.953l-15.237-46.416H114.26z M161.629,474.404h-49.592l9.594-29.225h69.223 C181.113,454.921,171.371,464.663,161.629,474.404z"/> /*Some more code goes on*/ </g> </svg>
Вы можете заметить, что есть некоторые XML-теги, такие как путь, круг, полигон и т. д.. Там вы можете добавить свой собственный цвет с помощью стиль. Посмотрите на приведенный ниже пример
<path style="fill:#AB7C94;" d="M114.26,436.584L99.023,483h301.953l-15.237-46.416H114.26z M161.629,474.404h-49.592l9.594-29.225h69.223 C181.113,454.921,171.371,464.663,161.629,474.404z"/>
добавьте атрибут стиля ко всем тегам, чтобы вы могли получить свой SVG вашего необходимого цвета
добавлена тестовая страница-цвет SVG через настройки фильтра:
Например
filter: invert(0.5) sepia(1) saturate(5) hue-rotate(175deg)
загрузить и цвет вашего SVG-Jsfiddle
взял идею из: https://blog.union.io/code/2017/08/10/img-svg-fill/
самый простой способ-создать шрифт из SVG с помощью службы, такой как https://icomoon.io/app/#/select или типа того. загрузите свой SVG, нажмите "Создать шрифт", включите файлы шрифтов и css в свою сторону и просто используйте и стилизуйте его, как и любой другой текст. Я всегда использую его так, потому что это делает стиль намного проще.
EDIT: как говорится в статьи прокомментировал @ CodeMouse92 значок шрифты испортить читателей экрана (и, возможно, плохо для SEO). Так что скорее придерживайтесь SVGs.
вы можете изменить SVG окраску с помощью css, если вы используете некоторые трюки. Я написал небольшой сценарий для этого.
- пройдите через список элементов, которые имеют изображение svg
- загрузите файл svg в формате xml
- fetch только svg часть
- изменить цвет пути
- заменить src с измененным svg в качестве встроенного изображения
$('img.svg-changeable').each(function () { var $e = $(this); var imgURL = $e.prop('src'); $.get(imgURL, function (data) { // Get the SVG tag, ignore the rest var $svg = $(data).find('svg'); // change the color $svg.find('path').attr('fill', '#000'); $e.prop('src', "data:image/svg+xml;base64," + window.btoa($svg.prop('outerHTML'))); }); });
приведенный выше код может работать неправильно, я реализовал это для элементов с СВГ фоновое изображение, которое работает почти так же, как это. Но в любом случае вы должны изменить этот скрипт, чтобы соответствовать вашему случаю. надеюсь, это помогло.
только SVG с информацией о пути. вы не можете сделать это с изображением.. в качестве пути вы можете изменить строк и заполнить информацию, и вы сделали. как иллюстратор
Итак: через CSS вы можете перезаписать path
fill
стоимостьюpath { fill: orange; }
но если вы хотите более гибкий способ, как вы хотите, чтобы изменить его с текстом при наличии некоторого эффекта зависания происходит.. используйте
path { fill: currentcolor; }
body { background: #ddd; text-align: center; padding-top: 2em; } .parent { width: 320px; height: 50px; display: block; transition: all 0.3s; cursor: pointer; padding: 12px; box-sizing: border-box; } /*** desired colors for children ***/ .parent{ color: #000; background: #def; } .parent:hover{ color: #fff; background: #85c1fc; } .parent span{ font-size: 18px; margin-right: 8px; font-weight: bold; font-family: 'Helvetica'; line-height: 26px; vertical-align: top; } .parent svg{ max-height: 26px; width: auto; display: inline; } /**** magic trick *****/ .parent svg path{ fill: currentcolor; }
<div class='parent'> <span>TEXT WITH SVG</span> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="0 0 32 32"> <path d="M30.148 5.588c-2.934-3.42-7.288-5.588-12.148-5.588-8.837 0-16 7.163-16 16s7.163 16 16 16c4.86 0 9.213-2.167 12.148-5.588l-10.148-10.412 10.148-10.412zM22 3.769c1.232 0 2.231 0.999 2.231 2.231s-0.999 2.231-2.231 2.231-2.231-0.999-2.231-2.231c0-1.232 0.999-2.231 2.231-2.231z"></path> </svg> </div>
чтобы просто изменить цвет символов :
перейдите в файл svg и в разделе стили укажите цвет в заливке.
<style>.cls-1{fill:#FFFFFF;}</style>
Если вы хотите сделать это для встроенного svg, который является, например, фоновым изображением в вашем css:
background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(31,159,215,1)' viewBox='...'/%3E%3C/svg%3E");
конечно, заменить ... с помощью встроенного кода изображения