Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to change svg fill color when used as base-64 background image data?

I'm using SVG for a project, loaded in css like this:

background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2222px%22%20height%3D%2238px%22%20viewBox%3D%220%200%2022%2038%22%20enable-background%3D%22new%200%200%2022%2038%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%3E.style0%7Bfill%3A%09%23f47216%3B%7D%3C/style%3E%3Cpath%20d%3D%22M2.643%2038c-0.64%200-1.282-0.231-1.79-0.699c-1.074-0.988-1.143-2.661-0.154-3.735l13.13-14.258L0.664%204.4%20c-0.967-1.094-0.865-2.765%200.229-3.732s2.765-0.864%203.7%200.229L19.37%2017.592c0.898%201%200.9%202.545-0.035%203.542L4.588%2037.1%20C4.067%2037.7%203.4%2038%202.6%2038z%22%20class%3D%22style0%22/%3E%3C/svg%3E'); 

I have some hover states to highlight by changing the fill color of the arrow.

For now, I'm simply applying the same svg data with the fill portion (fill%3A%09%23f47216%3B%7D%3C where f47216 is the color) changed with the right/new color. Works pretty well. Though, I'd like to know if there's maybe some other smarter method.

like image 511
Luca Reghellin Avatar asked Mar 13 '14 16:03

Luca Reghellin


People also ask

Can we change the background color of SVG image?

There are two types of images that can be used in the background and in both cases you can change the background color of the image. Raster: The images where each pixels represents the individual color within the image.

How can I change the color of my SVG image?

To simply change the color of the svg : Go to the svg file and under styles, mention the color in fill.

Can I change background color of SVG in CSS?

You can't adjust individual properties, like fill color, of an SVG background because it is treated just like any image.


2 Answers

Use filter property of CSS. For me I wanted to change the color of the icon to white on Hover:

filter: grayscale(1) brightness(2); 
like image 125
GorvGoyl Avatar answered Oct 10 '22 18:10

GorvGoyl


Or if you want to do it dynamically try :

var green = '3CB54A'; var red = 'ED1F24'; var svg = '<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="320px" height="100px" viewBox="0 0 320 100" enable-background="new 0 0 320 100" xml:space="preserve"> <polygon class="mystar" fill="#'+green+'" points="134.973,14.204 143.295,31.066 161.903,33.77 148.438,46.896 151.617,65.43 134.973,56.679 118.329,65.43 121.507,46.896 108.042,33.77 126.65,31.066 "/><circle class="mycircle" fill="#'+red+'" cx="202.028" cy="58.342" r="12.26"/></svg>';       var encoded = window.btoa(svg); document.body.style.background = "url(data:image/svg+xml;base64,"+encoded+")"; 

Fiddle Here

like image 37
tnt-rox Avatar answered Oct 10 '22 17:10

tnt-rox