My Theme Switcher with live favicon update!

jjaimealeman

Jaime Aleman

Posted on October 4, 2021

My Theme Switcher with live favicon update!

My Theme Switcher

With live updating favicon, also!

View live here https://organizedfellow.github.io/my-theme-switcher/

It seems that now just about every website has a "Theme Switcher" ability.

Well, here's my version of the same thing 😉

SVGs were created in https://designer.gravit.io/

  • favicon.svg!
  • dark.svg!
  • light.svg!
  • icon-moon.svg!
  • icon-sun.svg!

SVGs have been optimized using https://jakearchibald.github.io/svgomg/.

Original source for the theme switcher came from Luke Lowrey.

But I came up with the favicon switching by sourcing from Stackoverflow, CSS Tricks, and various other places.

If you would rather use png to support older browsers, you can use https://convertio.co/svg-png/.

The one thing I could NOT figure out - how to preload the appropriate favicon based on localStorage. That's why I have favicon.svg set as the default. If someone could figure that out for me, that would be awesome!


Here are the icons to make it easier to get started with in your project.

/images/favicon.svg

<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="68 10 14 14" width="14pt" height="14pt"><circle vector-effect="non-scaling-stroke" cx="75" cy="17" r="7" fill="#A3B7CC"/><path d="M75 10c-3.863 0-7 3.137-7 7s3.137 7 7 7V10Z" fill-rule="evenodd" fill="#FFEC38"/></svg>
Enter fullscreen mode Exit fullscreen mode

/images/dark.svg

<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="9 8.5 14 14" width="14pt" height="14pt"><circle vector-effect="non-scaling-stroke" cx="16" cy="15.5" r="7" fill="#A3B7CC"/></svg>
Enter fullscreen mode Exit fullscreen mode

/images/light.svg

<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="30.686 8.5 14 14" width="14pt" height="14pt"><circle vector-effect="non-scaling-stroke" cx="37.686" cy="15.5" r="7" fill="#FFEC38"/></svg>
Enter fullscreen mode Exit fullscreen mode

/images/icon-moon.svg

<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="34 30 22 22" width="22pt" height="22pt"><circle vector-effect="non-scaling-stroke" cx="45" cy="41" r="11" fill="#EBEBEB"/><path d="M43.122 30.164A10.657 10.657 0 0 1 45 30c6.071 0 11 4.929 11 11s-4.929 11-11 11a10.92 10.92 0 0 1-6.752-2.323c.971.32 2.008.49 3.085.49 5.565 0 10.084-4.519 10.084-10.084 0-4.954-3.581-9.078-8.295-9.919Z" fill-rule="evenodd" fill="#A3B7CC"/><circle vector-effect="non-scaling-stroke" cx="40.708" cy="44.208" r="1.833" fill="#A3B7CC"/><circle vector-effect="non-scaling-stroke" cx="45.749" cy="38.25" r="1.375" fill="#A3B7CC"/><circle vector-effect="non-scaling-stroke" cx="39.103" cy="37.104" r="1.146" fill="#A3B7CC"/></svg>
Enter fullscreen mode Exit fullscreen mode

/images/icon-sun.svg

<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="39 39 22 22" width="22pt" height="22pt"><path d="M46.778 42.222h-4.556v4.556L39 50l3.222 3.222v4.556h4.556L50 61l3.222-3.222h4.556v-4.556L61 50l-3.222-3.222v-4.556h-4.556L50 39l-3.222 3.222Z" fill-rule="evenodd" fill="#FF9B07"/><circle vector-effect="non-scaling-stroke" cx="50" cy="50" r="6.806" fill="#FFEC38"/></svg>
Enter fullscreen mode Exit fullscreen mode

This is my first contribution to the community.

Let me know if you like it and please tell me how else I could optimize the JavaScript. I am still learning :)

Enjoy friends!

💖 💪 🙅 🚩
jjaimealeman
Jaime Aleman

Posted on October 4, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

What was your win this week?
weeklyretro What was your win this week?

November 29, 2024

Where GitOps Meets ClickOps
devops Where GitOps Meets ClickOps

November 29, 2024

How to Use KitOps with MLflow
beginners How to Use KitOps with MLflow

November 29, 2024

Modern C++ for LeetCode 🧑‍💻🚀
leetcode Modern C++ for LeetCode 🧑‍💻🚀

November 29, 2024