JSFiddle - React, Tailwind, and code Playground

by Michel Plungjan

HTML

<!DOCTYPE html>

<html lang="pl">
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Gear List Maker</title>
        <meta name="description" content="">
        
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link rel="stylesheet" href="styles.css">
        <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
        <link rel="icon" href="images/favicon.svg" type="image/svg+xml">



    </head>

    <body>
        <header>
            <nav>
                <ul class="header-nav-links">
                    <li>
                        <label class="switch">
                            <input type="checkbox">
                            <span class="slider round"></span>
                      </label>
                    </li>
                    <li><a href="#">Languages</a></li>
                </ul>
            </nav>
            <div class="dropdown" data-dropdown>
                <button class="dropdown-button dropdown-link" data-dropdown-button>Settings</button>

                <div class="dropdown-menu">
                    <div class="dropdown-links-box">
                        <a href="#" class="link">Settings</a>
                        <a href="#" class="link">Help</a>
                        <a href="#" class="link">Logout</a>
                    </div>
                </div>
            </div>
        </header>

        <nav>
            <div class="sidebar" data-sidebar>
                <div class="logo-content">
                    <div class="logo">
                        <span class="material-icons">hiking</span>
                        <span class="logo-name">Gear List Maker</span>
                    </div>
                    <span class="material-icons" id="sidebar-button" data-sidebar-button>menu</span>
                </div>
                <div class="sidebar-content-box">
                <ul...

CSS

@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&display=swap');

:root {
  --color-bg: whitesmoke;
  --color-tx: gray;
  --color-bx: white;
  --color-br: white;
  --color-hr: gray;
  --color-ahr: white;
}

/* global styles */

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  font-family: "Montserrat", sans-serif;
}

body {
  background-color: var(--color-bg);
  color: var(--color-tx);
}

li,
a,
button {
  font-weight: 500;
  font-size: 16px;
  color: var(--color-tx);
  text-decoration: none;
}

header {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  padding: 20px 2%;
}

p,
h2 {
  margin-top: 10px;
  ;
}

/* .logo {
    cursor: pointer;
    height: 20px;
    margin-right: auto;
} */

/* Header menu styles */

.header-nav-links {
  list-style-type: non;
}

.header-nav-links li {
  display: inline-block;
  padding: 0px 20px;
}

.header-nav-links li a {
  transition: all 0.3s ease 0s;
}

.header-nav-links li a:hover {
  color: #0088a9;
}

.dropdown-button {
  padding: 9px 25px;
  background-color: rgba(0, 136, 169, 1);
  border: none;
  border-radius: 50px;
  cursor: pointer;
  transition: all 0.3s ease 0s;
  margin-left: 20px;
  color: #edf0f1;
}

.dropdown-button:hover {
  background-color: rgba(0, 136, 169, 0.8);
}

/*.dropdown > .link:focus,
.link:hover {
    color: black;
}*/


.dropdown {
  position: relative;
}

.dropdown-menu {
  position: absolute;
  left: 0;
  top: calc(100% + .25rem);
  background-color: var(--color-bg);
  padding: .75rem;
  border-radius: .25rem;
  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .1);
  margin-left: 20px;
  opacity: 0;
  pointer-events: none;
  transform: translateY(-10px);
  transition: opacity 150ms ease-in-out, transform 150ms ease-in-out;
  text-align: center;
  z-index: 9;
  line-height: 30px;

}

.dropdown.active>.dropdown-link+.dropdown-menu {
  opacity: 1;
  transform: translateY(0px);
  pointer-events: auto;

}

/* Sidebar menu styles */

.sidebar {
 ...

JavaScript

//dropdown button
document.addEventListener('click', e => {
    const isDropdownButton = e.target.matches("[data-dropdown-button")
    if (!isDropdownButton && e.target.closest('[data-dropdown]') != null) return

    let currentDropdown
    if (isDropdownButton) {
        currentDropdown = e.target.closest('[data-dropdown')
        currentDropdown.classList.toggle('active')
    }

    document.querySelectorAll("[data-dropdown].active").forEach(dropdown => {
        if (dropdown === currentDropdown) return
        dropdown.classList.remove('active')
    })
})

//sidebar menu
document.addEventListener('click', e => {
    const isSidebarButton = e.target.matches("[data-sidebar-button]")
    if (!isSidebarButton && e.target.closest('[data-sidebar]') != null) return

    let currentSidebar
    let currentContentBox

    if (isSidebarButton) {
        currentSidebar = e.target.closest('[data-sidebar]')
        currentSidebar.classList.toggle('active')
    }    
})

//darkmode button
const switchButton = document.querySelector(".switch")

switchButton.addEventListener("click", (e) => { 
    document.querySelector("body").classList.toggle("dark",switchButton.querySelector("input[type=checkbox]").checked)
})