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)
})