Dark mode en favicons SVG

Desde el 2020, la mayoría de los navegadores han comenzado a dar soporte a favicons en formato .svg, actualmente comprende algo más del 76% de los navegadores.

El uso de favicons en formato SVG permite escalar su tamaño sin pérdida de calidad. Además, este formato nos permite tener CSS incorporado, lo que abre la posibilidad a hacer algunos cambios dependiendo del tema (claro u oscuro) que esté utilizando nuestro usuario. Esto lo lograremos haciendo uso de las media queries que reaccionan a la preferencia de color del sistema operativo.

Favicon change color on dark mode

Implementación de favicons SVG

Lo primero es utilizar un archivo .svg en lugar del .ico dentro del index.html de nuestra página o aplicación web. Aquí el cambio más importante es en type.

<link rel="icon" type="image/svg+xml" href="/favicon.svg" />

Aplicación del “Dark mode”

Lo siguiente es la Implementación de un SVG que responde a las preferencias del usuario utilizando el atributo prefers-color-scheme. Para ello podemos incorporar CSS dentro de la etiqueta <style />

<svg viewBox="0 0 128 128">
  <path d="Números raros" />
  <style>
    path {
      fill: #000;
    }
    @media (prefers-color-scheme: dark) {
      path {
        fill: #fff;
      }
    }
  </style>
</svg>

En este pequeño snippet se puede ver cómo se utiliza prefers-color-scheme: dark para intercambiar el color de relleno del elemento <path /> cuando el usuario se encuentra en modo oscuro. Puedes hacer una prueba cambiando el theme de tu ordenador y refrescar esta misma página, como se muestra en el gif del principio.

Para profundizar más en el uso de SVG y sus elementos, existen guías como SVG Pahts de @nandafyi que detallas su funcionamiento y ofrece tanto ejemplos cómo ejercicios para mejorar su comprensión.