Guía · SVG

Cómo cambiar el color de un icono SVG: 3 métodos

Te has descargado un pack de iconos, encaja con lo que necesitabas, pero vienen en un color que no es el tuyo. La buena noticia es que un SVG no es una imagen cerrada como un PNG: es texto. Puedes abrirlo con el Bloc de notas y leer las instrucciones de dibujo, incluido el color.

Eso significa que recolorearlo no requiere Illustrator ni Photoshop. Aquí van los tres métodos que uso, del más directo al más flexible, con el código de cada uno. Al final está lo que hacer cuando el icono tiene varios colores, que es el caso que suele atascar a la gente.

1. Cambiar el color a mano

El más directo, y el que conviene si solo vas a usar el icono en un sitio. Abre el archivo con cualquier editor de texto —el Bloc de notas vale— y busca el atributo fill. Verás un valor hexadecimal como fill="#050000": ese es el color del dibujo. Sustitúyelo por el tuyo, guarda, y listo.

<svg viewBox="0 0 512 512" fill="#8b7bff">
  <path d="…" />
</svg>

Si el icono no trae ningún fill, el navegador lo pinta en negro por defecto; en ese caso no hay que sustituir nada, sino añadir el atributo a la etiqueta <svg>. Y si no tienes claro qué color poner, el generador de paletas te da armonías completas con su código hexadecimal y la comprobación de contraste, para que el icono siga leyéndose sobre tu fondo.

2. Que el icono herede el color del texto

Este es el truco más práctico para una web, y el que más tiempo ahorra a la larga. En lugar de un color fijo, pon la palabra clave currentColor y pega el SVG en línea dentro de tu HTML. El icono adoptará automáticamente el color del texto que lo rodea:

<p style="color: #8b7bff">
  <svg viewBox="0 0 512 512" fill="currentColor" width="24" height="24" aria-hidden="true">
    <path d="…" />
  </svg>
  Descargar
</p>

La gracia es que funciona solo cuando cambias de contexto. Un icono dentro de un botón azul se vuelve azul; el mismo icono en un aviso rojo se vuelve rojo; y al alternar entre tema claro y oscuro se ajusta sin que escribas una línea más. Es exactamente lo que hacen los iconos de las muestras en los packs de este sitio.

La condición es que el SVG esté pegado en línea en el HTML. Si lo insertas con <img src="icono.svg">, el navegador lo trata como una imagen cerrada: ni currentColor ni tu CSS pueden entrar a modificarlo. Esa es la causa número uno de "no me funciona el truco".

3. Colorear desde el CSS, sin tocar el archivo

Si prefieres dejar el SVG como archivo suelto —más limpio si tienes muchos— y controlar el color desde la hoja de estilos, úsalo como máscara. El navegador pinta el fondo del elemento y recorta la silueta del icono encima:

.icono {
  display: inline-block;
  width: 32px;
  height: 32px;
  background: #35d6c8;
  -webkit-mask: url("iconos/descargar.svg") center / contain no-repeat;
  mask: url("iconos/descargar.svg") center / contain no-repeat;
}

La ventaja es el mantenimiento: cambias el color de todos los iconos de tu sitio tocando una sola línea, sin volver a abrir un solo archivo. Y como el color es una propiedad CSS normal, puedes animarlo, cambiarlo al pasar el ratón o vincularlo a una variable de tu tema. Si además quieres degradados, sombras o filtros sobre esos iconos, en Código web tienes generadores visuales que te dan el CSS hecho.

Cuando el icono tiene varios colores

Los tres métodos de arriba dan por hecho que el icono es una silueta de un solo color, que es como vienen los estilos de contorno y sólido. Los iconos de estilo plano son otra historia: cada forma trae su propio relleno definido, así que ni currentColor ni la máscara sirven —ambos aplican un color único a todo el dibujo.

Para esos, toca abrir el SVG con un editor de texto y sustituir los valores hexadecimales uno a uno. Suelen estar agrupados en un bloque <style> al principio del archivo, lo que hace el cambio más llevadero de lo que parece. Un aviso: si vas a incrustar varios iconos planos en la misma página, insértalos como <img> en vez de en línea, o las clases internas de unos pisarán las de otros y verás colores cruzados.

Consejo: antes de subir iconos a tu web, pásalos por un optimizador. Los SVG suelen arrastrar metadatos invisibles del programa con el que se dibujaron, y a menudo pesan más que el propio dibujo. El optimizador de Lienzo se los quita sin que el archivo salga de tu equipo.

Cuál de los tres usar

  • Un icono suelto, un color fijo: edítalo a mano. No merece la pena montar nada más.
  • Iconos dentro de texto, botones o menús: currentColor en línea. Es el que menos mantenimiento pide.
  • Muchos iconos como archivos sueltos: máscara CSS. Un solo sitio donde cambiar el color de todos.
  • Iconos multicolor: a mano, sobre el bloque <style> del archivo.

Preguntas frecuentes

¿Por qué mi icono SVG se ve negro y no cambia de color?

Suele haber dos causas. La primera es que el archivo no declara ningún relleno: sin un fill, el navegador lo pinta en negro por defecto, y basta con añadir fill="currentColor" a la etiqueta <svg>. La segunda es que lo has insertado con una etiqueta <img>: así el SVG se comporta como una imagen cerrada y ni el CSS ni currentColor pueden entrar. Para poder recolorearlo, pégalo en línea dentro del HTML o úsalo como máscara CSS.

¿Puedo cambiar el color de un SVG sin abrir el archivo?

Sí, usándolo como máscara CSS. Declaras el color como background del elemento y aplicas el SVG en la propiedad mask: el navegador pinta el fondo y recorta la silueta del icono. El archivo se queda intacto, y cambias el color de todos los iconos del sitio tocando una sola línea de CSS.

¿Y si el icono tiene varios colores?

Los iconos de estilo plano traen un color propio en cada forma, así que no responden a currentColor ni a la máscara, que solo sirven para siluetas de un color. Para esos hay que abrir el SVG con un editor de texto y sustituir los valores hexadecimales uno a uno, normalmente en el bloque <style> del principio del archivo. Si vas a incrustar varios iconos planos en la misma página, insértalos como <img> en lugar de en línea para que sus clases internas no choquen entre sí.

¿Sirve esto con iconos de cualquier sitio?

Sí, siempre que sean SVG de verdad y no un PNG con la extensión cambiada. Ábrelo con un editor de texto: si ves etiquetas y atributos legibles, es un SVG y los tres métodos funcionan. Ten en cuenta que las condiciones de uso las fija quien creó cada archivo, así que compruébalas antes de llevar un icono ajeno a un encargo comercial.

Compartir

Sigue aprendiendo

Packs de iconos para practicar

Todos vienen en SVG, con nombres en español y descarga directa.

Ver todos los recursos →

Lienzo en YouTube

Un pack nuevo cada semana

Iconos, sonidos, plantillas de After Effects y procesos creativos reales de diseño y marketing. Suscríbete y no te pierdas el próximo recurso gratuito.