Working Analog Clock using HTML CSS & Javascript

Hello readers, Today in this blog you’ll learn how to build a Working Analog Clock using HTML CSS & Javascript
A clock or watch is called “analog” when it has moving hands and (normally) hours marked from 1 to 12 to show you the time. Some have Roman Numerals (I, II, III, etc) instead, or no numbers at all.
As you can see in the image, this is an Analog Clock which is based in HTML CSS & Javascript. There are 12 marks for showing times 1 to 12 and 3 handles for showing minutes, hours, and second. As usually, the hour handle is small, and minute handle in bigger than that, and the second handle larger overall.
If you’re feeling difficulty to understanding what I’m saying then you can Try the code below to check the output yourself.Still facing issues? Feel free to mail us your queries on info@vikashtech.com
HTML
<!DOCTYPE html>
<!-- Created By praveen kumar -->
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Neumorphism Analog Clock | VikashTech</title>
<link rel="stylesheet" href="blog.css">
</head>
<body>
<div class="clock">
<div class="center-nut">
</div>
<div class="center-nut2">
</div>
<div class="indicators">
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
</div>
<div class="sec-hand">
<div class="sec">
</div>
</div>
<div class="min-hand">
<div class="min">
</div>
</div>
<div class="hr-hand">
<div class="hr">
</div>
</div>
</div>
<script>
const sec = document.querySelector(".sec");
const min = document.querySelector(".min");
const hr = document.querySelector(".hr");
setInterval(function(){
let time = new Date();
let secs = time.getSeconds() * 6;
let mins = time.getMinutes() * 6;
let hrs = time.getHours() * 30;
sec.style.transform = `rotateZ(${secs}deg)`;
min.style.transform = `rotateZ(${mins}deg)`;
hr.style.transform = `rotateZ(${hrs+(mins/12)}deg)`;
});
</script>
</body>
</html>
CSS
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
html,body{
height: 100%;
}
body{
display: grid;
place-items: center;
background: #dde1e7;
text-align: center;
}
.clock{
position: relative;
display: flex;
align-items: center;
justify-content: center;
background: #dde1e7;
height: 250px;
width: 250px;
border-radius: 50%;
box-shadow: -3px -3px 7px #ffffff73,
3px 3px 5px rgba(94,104,121,0.288);
}
.clock:before{
position: absolute;
content: '';
height: 220px;
width: 220px;
background: #dde1e7;
border-radius: 50%;
box-shadow: inset -3px -3px 7px #ffffff73,
inset 3px 3px 5px rgba(94,104,121,0.288);
}
.clock:after{
position: absolute;
content: '';
height: 120px;
width: 120px;
background: #dde1e7;
border-radius: 50%;
box-shadow: -1px -1px 5px #ffffff73,
1px 1px 3px rgba(94,104,121,0.288);
}
.clock .center-nut{
height: 15px;
width: 15px;
background: #404040;
border-radius: 50%;
z-index: 2;
position: absolute;
}
.clock .center-nut2{
height: 9px;
width: 9px;
background: #3498db;
border-radius: 50%;
z-index: 15;
position: absolute;
}
.indicators div{
position: absolute;
width: 2px;
height: 5px;
background: #404040;
}
.indicators div:nth-child(1){
transform: rotate(30deg) translateY(-100px);
}
.indicators div:nth-child(2){
transform: rotate(60deg) translateY(-100px);
}
.indicators div:nth-child(3){
background: #3498db;
transform: rotate(90deg) translateY(-100px);
}
.indicators div:nth-child(4){
transform: rotate(120deg) translateY(-100px);
}
.indicators div:nth-child(5){
transform: rotate(150deg) translateY(-100px);
}
.indicators div:nth-child(6){
background: #3498db;
transform: rotate(180deg) translateY(-100px);
}
.indicators div:nth-child(7){
transform: rotate(210deg) translateY(-100px);
}
.indicators div:nth-child(8){
transform: rotate(240deg) translateY(-100px);
}
.indicators div:nth-child(9){
background: #3498db;
transform: rotate(270deg) translateY(-100px);
}
.indicators div:nth-child(10){
transform: rotate(300deg) translateY(-100px);
}
.indicators div:nth-child(11){
transform: rotate(330deg) translateY(-100px);
}
.indicators div:nth-child(12){
background: #3498db;
transform: rotate(360deg) translateY(-100px);
}
.sec-hand,.min-hand,.hr-hand{
position: absolute;
}
.sec-hand, .sec{
height: 180px;
width: 180px;
z-index: 6;
}
.min-hand, .min{
height: 140px;
width: 140px;
z-index: 5;
}
.hr-hand, .hr{
height: 110px;
width: 110px;
z-index: 4;
}
.sec,.min,.hr{
display: flex;
justify-content: center;
position: absolute;
}
.sec:before{
position: absolute;
content: '';
height: 110px;
width: 3px;
background: #3498db;
}
.sec:after{
position: absolute;
content: '';
height: 35px;
width: 7px;
background: #3498db;
top: 105px;
border-radius: 5px;
}
.min:before{
position: absolute;
content: '';
width: 1px;
top: -15px;
border-left: 3px solid transparent;
border-right: 3px solid transparent;
border-bottom: 60px solid #e95949;
}
.min:after{
position: absolute;
content: '';
width: 3px;
top: 40px;
border-left: 2px solid transparent;
border-right: 2px solid transparent;
border-top: 30px solid #e95949;
}
.hr:before{
position: absolute;
content: '';
width: 1px;
border-left: 3px solid transparent;
border-right: 3px solid transparent;
border-bottom: 35px solid #303030;
}
.hr:after{
position: absolute;
content: '';
width: 3px;
top: 34px;
border-left: 2px solid transparent;
border-right: 2px solid transparent;
border-top: 25px solid #303030;
}
- By Praveen Kumar
- February 25, 2021 10:21 am
- 0
- Tags: analog clock in html, beautiful clock in html, responsive clock in html