<!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"> <title>Clock</title> </head> <body> <style> *{ margin: 0; padding: 0; box-sizing: border-box; } :root{ --primary-color: #000; --secondary-color: #fff; } html{ transition: all 0.5s ease-in; } html.dark{ --primary-color: #fff; --secondary-color: #000; } html.dark{ background-color: #111; color: var(--primary-color); } body{ font-family: 'roboto', sans-serif; display: flex; flex-direction: column; justify-content: center; align-items: center; height: 100vh; overflow: hidden; } .toggle{ background-color: var(--primary-color); color: var(--secondary-color); border: 0; border-radius: 4px; padding: 8px 12px; position: absolute; top: 3%; left:50%; transform: translate(-50%, -3%); cursor: pointer; } .toggle:focus{ outline: none; } .clock-container{ display: flex; flex-direction: column; justify-content: space-between; align-items: center; } .clock{ position: relative; width: 250px; height: 250px; border-radius: 50%; background-color: #4e4d4d2f; border: 2px solid rgb(97, 16, 7); box-shadow: -1px -1px 9px 2px #1616168e; } .needle{ background-color: var(--primary-color); position: absolute; top: 50%; left: 50%; height: 65px; width: 3px; transform-origin:bottom center ; transition: all 0.2s ease-in; border-radius: 40%; } .needle.hour{ transform: translate(-50%, -100%) rotate(0deg); } .needle.minute{ transform: translate(-50%, -100%) rotate(0deg); height: 100px; } .needle.second{ transform: translate(-50%, -100%) rotate(0deg); height: 100px; background-color: #e74c3c; } .clock-dial { position: absolute; z-index: 1; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 230px; height: 230px; } .clock-dial .clock-indicator { position: absolute; width: 2px; height: 6px; margin: 113px 114px; background-color: rgb(87, 72, 72); } .clock-indicator:nth-child(1) { transform: rotate(30deg) translateY(-113px); } .clock-indicator:nth-child(2) { transform: rotate(60deg) translateY(-113px); } .clock-indicator:nth-child(3) { transform: rotate(90deg) translateY(-113px); background-color: rgb(117, 110, 110); } .clock-indicator:nth-child(4) { transform: rotate(120deg) translateY(-113px); } .clock-indicator:nth-child(5) { transform: rotate(150deg) translateY(-113px); } .clock-indicator:nth-child(6) { transform: rotate(180deg) translateY(-113px); background-color: #aaa; } .clock-indicator:nth-child(7) { transform: rotate(210deg) translateY(-113px); } .clock-indicator:nth-child(8) { transform: rotate(240deg) translateY(-113px); } .clock-indicator:nth-child(9) { transform: rotate(270deg) translateY(-113px); background-color: #aaa; } .clock-indicator:nth-child(10) { transform: rotate(300deg) translateY(-113px); } .clock-indicator:nth-child(11) { transform: rotate(330deg) translateY(-113px); } .clock-indicator:nth-child(12) { transform: rotate(360deg) translateY(-113px); background-color: #c00; } .center-point{ background-color: #e74c3c; width: 10px; height: 10px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; } .center-point::after{ content: ''; background-color: var(--primary-color); width: 5px; height: 5px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; } .time{ font-size: 60px; } .date{ color: #aaa; font-size: 14px; letter-spacing: 0.3px; text-transform: uppercase; } .date .circle{ background-color: var(--primary-color); color: var(--secondary-color); border-radius: 50%; height: 18px; width: 18px; display: inline-flex; align-items: center; justify-content: center; line-height: 18px; transition: all 0.5s ease-in; font-size: 12px; } </style> <button class="toggle">Dark mode</button> <div class="clock-container"> <div class="clock"> <div class="needle hour"></div> <div class="needle minute"></div> <div class="needle second"></div> <div class="center-point"></div> <div class="clock-dial"> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> <div class="clock-indicator"></div> </div> </div> <div class="time"></div> <div class="date"><span class="circle"></span></div> </div> </body> <script> const hourEl = document.querySelector('.hour'); const minuteEl = document.querySelector('.minute'); const secondEl = document.querySelector('.second'); const timeEl = document.querySelector('.time'); const dateEl = document.querySelector('.date'); const toggle = document.querySelector('.toggle'); const days = ["Sunday", "Monday", "tuesday", "Wednesday", "Thursday", "Friday", "Saterday"]; const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; toggle.addEventListener('click', (e) => { const html = document.querySelector('html'); if(html.classList.contains('dark')){ html.classList.remove('dark') e.target.innerHTML = 'Dark mode'; } else{ html.classList.add('dark') e.target.innerHTML = 'Light mode'; } }); function setTime(){ const time = new Date(); const month = time.getMonth(); const day = time.getDay(); const date = time.getDate(); const hours = time.getHours(); const hoursForClock = hours % 12; const minutes = time.getMinutes(); const seconds = time.getSeconds(); const ampm = hours >= 12 ? 'PM' : 'AM'; hourEl.style.transform=`translate(-50%, -100%) rotate(${scale(hoursForClock, 0, 11, 0, 360)}deg)`; minuteEl.style.transform=`translate(-50%, -100%) rotate(${scale(minutes, 0, 59, 0, 360)}deg)`; secondEl.style.transform=`translate(-50%, -100%) rotate(${scale(seconds, 0, 59, 0, 360)}deg)`; timeEl.innerHTML = `${hoursForClock}:${minutes < 10 ? `0${minutes}`: minutes} ${ampm}`; dateEl.innerHTML =`${days[day]}, ${months[month]} <span class="circle">${date}</span>`; } const scale = (num, in_min, in_max, out_min, Out_max) => { return(num - in_min) * (Out_max - out_min) / (in_max -in_min) + out_min; } setTime(); setInterval(setTime, 1000); </script> </html>
Wowww I like it so much 🕰
I agree with you
Great one Keep doing that work
Amazing website 💯 I like it ! Keep going and good luck.
Thanks everybody I really appreciate it 🙏🏼