img src SVG cambiando los estilos con CSS
HTML
<img src="logo.svg" alt="Logo" class="logo-img">
CSS
.logo-img path {
fill: #000;
}
El svg anterior se carga y es de forma nativa fill: #fff
, pero cuando uso el anterior css
para intentar cambiarlo a negro, no cambia. Esta es la primera vez que juego con SVG y no estoy seguro de por qué no funciona.
Podrías configurar tu SVG como una máscara. De esa manera, establecer un color de fondo actuaría como color de relleno.
HTML
<div class="logo"></div>
CSS
.logo {
background-color: red;
-webkit-mask: url(logo.svg) no-repeat center;
mask: url(logo.svg) no-repeat center;
}
JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/
MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
Compruebe si su navegador admite esta función: https://caniuse.com/#search=mask
Pruebe CSS puro:
.logo-img {
/* to black */
filter: invert(1);
/* or to blue */
filter: invert(0.5) sepia(1) saturate(5) hue-rotate(175deg);
}
más información en este artículo https://blog.union.io/code/2017/08/10/img-svg-fill/
Si su objetivo es simplemente cambiar el color del logotipo y no necesariamente NECESITA usar CSS, entonces no use javascript o jquery como lo sugirieron algunas respuestas anteriores.
Para responder con precisión a la pregunta original, simplemente:
Abre tu
logo.svg
en un editor de texto.búscalo
fill: #fff
y reemplázalo confill: #000
Por ejemplo, logo.svg
podría verse así cuando se abra en un editor de texto:
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" fill="#fff"/>
</svg>
... simplemente cambia el relleno y guarda.
Si desea un color dinámico, no desea utilizar javascript y no desea un SVG en línea, utilice una variable CSS. Funciona en Chrome, Firefox y Safari. editar: y borde
<svg>
<use href="logo.svg" style="--color_fill: #000;"></use>
</svg>
En su SVG, reemplace cualquier instancia de style="fill: #000"
con style="fill: var(--color_fill)"
.
Edite su archivo SVG, agréguelo fill="currentColor"
a la etiqueta svg y asegúrese de eliminar cualquier otra propiedad de relleno del archivo.
Por ejemplo:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 139.435269383854" id="img" fill="currentColor">...
</svg>
Tenga en cuenta que currentColor
es una palabra clave (no un color fijo en uso).
Después de eso, puedes cambiar el color usando CSS, estableciendo la color
propiedad del elemento o desde su padre.
Ejemplo:
.div-with-svg-inside {
color: red;
}
Se me olvidó decir que debes insertar el SVG de esta manera:
<svg>
<use xlink:href='/assets/file.svg#img' href="/assets/file.svg#img"></use>
</svg>
si la imagen proviene de alguna variable entonces
<svg>
<use [attr.xlink:href]="somevariable + '#img'" [attr.href]="somevariable + '#img'"></use>
</svg>
Tenga en cuenta que #img
es la identificación de la svg
etiqueta dentro del archivo svg. Además, tenga en cuenta xlink:href
que ha quedado obsoleto; en su lugar, debe usar href
o puede usar ambos para admitir versiones anteriores del navegador.
Otra forma de hacerlo: https://css-tricks.com/cascading-svg-fill-color/