html
<img src="logo.svg" alt="Logo" class="logo-img">
css
.logo-img path {
fill: #000;
}
El svg anterior se carga y es nativo, 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.
Respuestas:
Si su objetivo es solo cambiar el color del logotipo, y no necesariamente NECESITA usar CSS, entonces no use javascript o jquery como se sugirió en algunas respuestas anteriores.
Para responder con precisión la pregunta original, solo:
Abre tu
logo.svg
en un editor de texto.búsquelo
fill: #fff
y reemplácelo confill: #000
Por ejemplo,
logo.svg
podría verse así cuando se abre en un editor de texto:... solo cambia el relleno y guarda.
fuente
path
ocircle
artículos como<path fill="#777777" d="m129.774,74.409c-5.523,...
.fill="currentColor"
luego usar elcolor
elemento primario css-tricks.com/cascading-svg-fill-colorPuedes configurar tu SVG como una máscara. De esa manera, establecer un color de fondo actuaría como su color de relleno.
HTML
CSS
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
fuente
mask
es uninvalid property value
. Estoy probando esto en Chrome.Prueba CSS puro:
Más información en este artículo https://blog.union.io/code/2017/08/10/img-svg-fill/
fuente
2018: si desea un color dinámico, no desea usar javascript y no desea un SVG en línea, use una variable CSS. Funciona en Chrome, Firefox y Safari. editar: y Edge
En su SVG, reemplace cualquier instancia de
style="fill: #000"
constyle="fill: var(--color_fill)"
.fuente
"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
está en desuso a favor dehref
. Entonces esto puede funcionar.Primero tendrá que inyectar el SVG en el DOM HTML.
Hay una biblioteca de código abierto llamada SVGInject que hace esto por usted. Utiliza el
onload
atributo para desencadenar la inyección.Aquí hay un ejemplo mínimo con SVGInject:
Después de cargar la imagen
onload="SVGInject(this)
, activará la inyección y el<img>
elemento será reemplazado por el contenido del archivo SVG provisto en elsrc
atributo.Resuelve varios problemas con la inyección de SVG:
Los SVG pueden ocultarse hasta que finalice la inyección. Esto es importante si un estilo ya se aplica durante el tiempo de carga, lo que de otro modo causaría un breve "destello de contenido sin estilo".
Los
<img>
elementos se inyectan automáticamente. Si agrega SVG dinámicamente, no tiene que preocuparse por volver a llamar a la función de inyección.Se agrega una cadena aleatoria a cada ID en el SVG para evitar tener el mismo ID varias veces en el documento si se inyecta un SVG más de una vez.
SVGInject es Javascript simple y funciona con todos los navegadores que admiten SVG.
Descargo de responsabilidad: soy coautor de SVGInject
fuente
La respuesta de @Praveen es sólida.
No pude lograr que respondiera en mi trabajo, así que hice una función de desplazamiento de jquery para ello.
CSS
JS / JQuery
fuente
¿Por qué no crear una fuente web con su imagen o imágenes svg, importar la fuente web en el CSS y luego simplemente cambiar el color del glifo utilizando el atributo de color CSS? No se necesita javascript
fuente
Esta respuesta se basa en la respuesta https://stackoverflow.com/a/24933495/3890888 pero con una versión simple de JavaScript del script utilizado allí.
Debe hacer que el SVG sea un SVG en línea . Puede utilizar este script agregando una clase
svg
a la imagen:Y luego, ahora si lo haces:
O tal vez:
JSFiddle: http://jsfiddle.net/erxu0dzz/1/
fuente
parser.parseFromString(text, "image/svg+xml");
fetch
que se añadió a Safari en 10.1 ( developer.mozilla.org/en-US/docs/Web/API/Fetch_API ). La versión de jQuery anterior funciona.Use filtros para transformar a cualquier color.
Recientemente encontré esta solución, y espero que alguien pueda usarla. Como la solución usa filtros, se puede usar con cualquier tipo de imagen. No solo svg.
Si tiene una imagen de un solo color de la que solo desea cambiar el color, puede hacerlo con la ayuda de algunos filtros. También funciona en imágenes multicolores, por supuesto, pero no puede seleccionar un color específico. Solo la imagen completa.
Los filtros provienen del script propuesto en Cómo transformar el negro en cualquier color usando solo filtros CSS. Si desea cambiar el blanco a cualquier color, puede ajustar el valor invertido en cada filtro.
fuente
Si solo está cambiando la imagen entre el color real y el blanco y negro, puede configurar un selector como:
{filtro: ninguno;}
y otro como:
fuente
Para expandir la respuesta @gringo, el método Javascript descrito en otras respuestas funciona, pero requiere que el usuario descargue archivos de imagen innecesarios y, en mi opinión, hincha el código.
Creo que un mejor enfoque sería migrar todos los gráficos vectoriales de 1 color a un archivo de fuente web. He usado Fort Awesome en el pasado, y funciona muy bien para combinar sus íconos / imágenes personalizados en formato SVG, junto con cualquier ícono de terceros que pueda estar usando (Font Awesome, íconos Bootstrap, etc.) en un solo archivo de fuente web El usuario tiene que descargar. También puede personalizarlo, por lo que solo incluye los iconos de terceros que está utilizando. Esto reduce la cantidad de solicitudes que debe realizar la página y su peso general, especialmente si ya incluye bibliotecas de iconos de terceros.
Si prefiere una opción más orientada al desarrollo, puede buscar en Google "npm svg webfont" y usar uno de los módulos de nodo más adecuados para su entorno.
Una vez que haya hecho cualquiera de esas dos opciones, podría cambiar fácilmente el color a través de CSS, y lo más probable es que haya acelerado su sitio en el proceso.
fuente
Simple..
Puedes usar este código:
Primero especifique la ruta de svg y luego escriba su ID, en este caso "Capa_1". Puede obtener la identificación de svg abriéndola en cualquier editor.
En css:
fuente
El principal problema en su caso es que está importando el svg desde una
<img>
etiqueta que ocultará la estructura SVG.Debe usar la
<svg>
etiqueta junto con el<use>
para obtener el efecto deseado. Para que funcione, debe asignar unid
camino a la ruta que desea usar en el archivo SVG<path id='myName'...>
para poder recuperarlos de la<use xlink:href="#myName"/>
etiqueta. Prueba el recortado a continuación.Mostrar fragmento de código
Tenga en cuenta que puede colocar cualquier URL antes del fragmento
#
si desea cargar el SVG desde una fuente externa (y no incrustarlo en su HTML). Además, normalmente no especifica el relleno en el CSS. Es mejor considerar usarfill:"currentColor"
dentro del SVG. El valor de color CSS del elemento correspondiente se utilizará en su lugar.fuente
Dado que SVG es básicamente código, solo necesita contenido. Usé PHP para obtener contenido, pero puedes usar lo que quieras.
Luego, imprimí el contenido "tal cual" dentro de un contenedor div
Para finalmente establecer la regla en los hijos SVG del contenedor en CSS
Obtuve estos resultados con un icono de material SVG:
Mozilla Firefox 59.0.2 (64 bits) Linux
Google Chrome66.0.3359.181 (Build oficial) (64 bits) Linux
Opera 53.0.2907.37 Linux
fuente
Esto podría ser útil para las personas que usan
PHP
en combinación con.svg
imágenes que desean manipular con CSS.No puede sobrescribir propiedades dentro de una etiqueta img con CSS. Pero cuando el código fuente de svg está incrustado en el HTML, seguramente puede hacerlo. Me gusta resolver este problema con una
require_once
función donde incluyo un.svg.php
archivo. ¡Es como importar una imagen pero aún puede sobrescribir estilos con CSS!Primero incluye el archivo svg:
E incluye este icono, por ejemplo:
Ahora podemos cambiar fácilmente el color de relleno de esta manera con CSS:
Primero intenté resolver este problema,
file_get_contents()
pero la solución anterior es mucho más rápida.fuente
Sepa que esta es una pregunta antigua, pero recientemente encontramos el mismo problema y lo resolvimos desde el lado del servidor. Esta es una respuesta específica de php, pero estoy seguro de que otros envs tienen algo similar. en lugar de usar la etiqueta img, representa el svg como svg desde el principio.
ahora cuando renderice el archivo obtendrá svg en línea completo
fuente
abra el icono de svg en su editor de código y agregue una clase después de la etiqueta de ruta:
Puede agregar clase a svg y cambiar el color de esta manera:
codepen
fuente
Si tiene acceso a JQuery, luego, extendiéndose a la respuesta de Praveen, uno puede cambiar programáticamente el color de diferentes elementos anidados dentro de SVG:
$('svg').find('path, text').css('fill', '#ffffff');
En find, puede mencionar diferentes elementos que deben cambiarse de color.
fuente