DEV Community

Cover image for Dark Mode Toggle Feature (CSS only)
Kunal Ukey
Kunal Ukey

Posted on Edited on

Dark Mode Toggle Feature (CSS only)

If you have been familiar with CSS for some time, then you know how powerful it is, not just for plane-styling HTML documents.
In this article, I will show you how you can achieve a dark mode toggle feature in your project using just CSS!
BTW this is my first article on dev.to so bear with me for some mistakes which I am surely going to make 😬

Things you need to know:

  1. HTML
  2. CSS

Approach

In our project, we will use a checkbox to toggle between light mode and dark mode. We will style the container's background and font color based on a checkbox property to wrap up our entire page content.

HTML

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" href="style.css" type="text/css">
      <title>Dark Mode Toggle</title>
   </head>
   <body>
      <!-- Checkbox Toggle -->
      <input type="checkbox" id="toggle">

      <!-- Container -->
      <div class="container">
         Make sure to include all your content inside this container div.
      </div>

   </body>
</html>
Enter fullscreen mode Exit fullscreen mode

CSS

Universal & Container Styling

We will start by giving the styling to the universal selector and the container.

/* Universal Styling */
* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}

/* Container for all the elements */
.container {
  width: 100%;
  min-height: 100vh;
  padding: 10px;
  background-color: #EEE;
  color: #333;
  transition: all 0.4s ease-out;
}
Enter fullscreen mode Exit fullscreen mode

Toggle Button Styling

Now we will turn our checkbox into a toggle button by applying some simple styles.

/* Toggle Button */
#toggle {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  width: 60px;
  height: 30px;
  border-radius: 30px;
  background-color: #333;
  position: absolute;
  top: 50px;
  right: 50px;
  transition: all 0.5s ease-in;
  cursor: pointer;
  z-index: 1;
}

/* Making a dot switch inside the Toggle Button */
#toggle::before {
  content: "";
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #EEE;
  position: absolute;
  top: 50%;
  left: 3px;
  transform: translateY(-50%);
  transition: all 0.5s ease-in;
}

/* Changing toggle button background when checked */
#toggle:checked {
  background: #03FFC0;
}

/* Changing dot switch color and moving to the right side when checked */
#toggle:checked::before {
  background: #333;
  left: 32px;
}
Enter fullscreen mode Exit fullscreen mode

Final Styling

Finally, we will change the container background using this style when the checkbox property is checked.

/* Changing the background & font color when checked */
#toggle:checked ~ .container {
  background-color: #333;
  color: #EEE;
}
Enter fullscreen mode Exit fullscreen mode

That's it! 🤩 You now have the fully working page with the dark mode toggle feature.
See the complete source code here.
Video Tutorial: here.

Thank you for reading! ❤

Top comments (0)