DEV Community

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

Posted on • Updated 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)