How are you friends, my name is Rahul and in today’s blog we are going to make a working analog clock using HTML, CSS and JS.This clock will tell the time according to your computer’s time.
Step 01 :– Creating a file name index.html in VS Code and linked css and js.
HTML Code :-
<link rel="stylesheet" href="style.css">
<div class="clock">
<div class="clock__second"></div>
<div class="clock__minute"></div>
<div class="clock__hour"></div>
<div class="clock__axis"></div>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
<section class="clock__indicator"></section>
</div>
<script src="script.js"></script>
Step 02 :- Create css file in vs code name style.css
CSS Code :-
html,
body {
height: 100%;
}
body {
background: #000000;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-family: sans-serif;
color: white;
}
p {
color: #f4eed7;
font-size: 0.8em;
opacity: 0.75;
}
.clock {
height: 200px;
width: 200px;
border-radius: 100px;
display: flex;
justify-content: center;
position: relative;
}
.clock__second, .clock__minute, .clock__hour, .clock__indicator {
position: absolute;
left: calc(50% - 1px);
width: 2px;
background: #f4eed7;
transform-origin: bottom center;
z-index: 2;
border-radius: 1px;
}
.clock__second {
height: 90px;
margin-top: 10px;
background: #4b9aaa;
-webkit-animation: time 60s infinite steps(60);
animation: time 60s infinite steps(60);
z-index: 3;
}
.clock__minute {
height: 80px;
margin-top: 20px;
opacity: 0.75;
-webkit-animation: time 3600s linear infinite;
animation: time 3600s linear infinite;
}
.clock__hour {
height: 60px;
margin-top: 40px;
-webkit-animation: time 43200s linear infinite;
animation: time 43200s linear infinite;
}
.clock__indicator {
height: 98px;
border-top: 2px solid #4b9aaa;
background: none;
}
.clock__indicator:nth-of-type(5n) {
opacity: 1;
height: 93px;
border-top: 7px solid #f4eed7;
}
.clock__axis {
background: #338fa1;
width: 5px;
height: 5px;
border-radius: 3px;
position: absolute;
z-index: 4;
top: 97px;
}
section:nth-of-type(1) {
transform: rotateZ(calc(6deg * 1));
}
section:nth-of-type(2) {
transform: rotateZ(calc(6deg * 2));
}
section:nth-of-type(3) {
transform: rotateZ(calc(6deg * 3));
}
section:nth-of-type(4) {
transform: rotateZ(calc(6deg * 4));
}
section:nth-of-type(5) {
transform: rotateZ(calc(6deg * 5));
}
section:nth-of-type(6) {
transform: rotateZ(calc(6deg * 6));
}
section:nth-of-type(7) {
transform: rotateZ(calc(6deg * 7));
}
section:nth-of-type(8) {
transform: rotateZ(calc(6deg * 8));
}
section:nth-of-type(9) {
transform: rotateZ(calc(6deg * 9));
}
section:nth-of-type(10) {
transform: rotateZ(calc(6deg * 10));
}
section:nth-of-type(11) {
transform: rotateZ(calc(6deg * 11));
}
section:nth-of-type(12) {
transform: rotateZ(calc(6deg * 12));
}
section:nth-of-type(13) {
transform: rotateZ(calc(6deg * 13));
}
section:nth-of-type(14) {
transform: rotateZ(calc(6deg * 14));
}
section:nth-of-type(15) {
transform: rotateZ(calc(6deg * 15));
}
section:nth-of-type(16) {
transform: rotateZ(calc(6deg * 16));
}
section:nth-of-type(17) {
transform: rotateZ(calc(6deg * 17));
}
section:nth-of-type(18) {
transform: rotateZ(calc(6deg * 18));
}
section:nth-of-type(19) {
transform: rotateZ(calc(6deg * 19));
}
section:nth-of-type(20) {
transform: rotateZ(calc(6deg * 20));
}
section:nth-of-type(21) {
transform: rotateZ(calc(6deg * 21));
}
section:nth-of-type(22) {
transform: rotateZ(calc(6deg * 22));
}
section:nth-of-type(23) {
transform: rotateZ(calc(6deg * 23));
}
section:nth-of-type(24) {
transform: rotateZ(calc(6deg * 24));
}
section:nth-of-type(25) {
transform: rotateZ(calc(6deg * 25));
}
section:nth-of-type(26) {
transform: rotateZ(calc(6deg * 26));
}
section:nth-of-type(27) {
transform: rotateZ(calc(6deg * 27));
}
section:nth-of-type(28) {
transform: rotateZ(calc(6deg * 28));
}
section:nth-of-type(29) {
transform: rotateZ(calc(6deg * 29));
}
section:nth-of-type(30) {
transform: rotateZ(calc(6deg * 30));
}
section:nth-of-type(31) {
transform: rotateZ(calc(6deg * 31));
}
section:nth-of-type(32) {
transform: rotateZ(calc(6deg * 32));
}
section:nth-of-type(33) {
transform: rotateZ(calc(6deg * 33));
}
section:nth-of-type(34) {
transform: rotateZ(calc(6deg * 34));
}
section:nth-of-type(35) {
transform: rotateZ(calc(6deg * 35));
}
section:nth-of-type(36) {
transform: rotateZ(calc(6deg * 36));
}
section:nth-of-type(37) {
transform: rotateZ(calc(6deg * 37));
}
section:nth-of-type(38) {
transform: rotateZ(calc(6deg * 38));
}
section:nth-of-type(39) {
transform: rotateZ(calc(6deg * 39));
}
section:nth-of-type(40) {
transform: rotateZ(calc(6deg * 40));
}
section:nth-of-type(41) {
transform: rotateZ(calc(6deg * 41));
}
section:nth-of-type(42) {
transform: rotateZ(calc(6deg * 42));
}
section:nth-of-type(43) {
transform: rotateZ(calc(6deg * 43));
}
section:nth-of-type(44) {
transform: rotateZ(calc(6deg * 44));
}
section:nth-of-type(45) {
transform: rotateZ(calc(6deg * 45));
}
section:nth-of-type(46) {
transform: rotateZ(calc(6deg * 46));
}
section:nth-of-type(47) {
transform: rotateZ(calc(6deg * 47));
}
section:nth-of-type(48) {
transform: rotateZ(calc(6deg * 48));
}
section:nth-of-type(49) {
transform: rotateZ(calc(6deg * 49));
}
section:nth-of-type(50) {
transform: rotateZ(calc(6deg * 50));
}
section:nth-of-type(51) {
transform: rotateZ(calc(6deg * 51));
}
section:nth-of-type(52) {
transform: rotateZ(calc(6deg * 52));
}
section:nth-of-type(53) {
transform: rotateZ(calc(6deg * 53));
}
section:nth-of-type(54) {
transform: rotateZ(calc(6deg * 54));
}
section:nth-of-type(55) {
transform: rotateZ(calc(6deg * 55));
}
section:nth-of-type(56) {
transform: rotateZ(calc(6deg * 56));
}
section:nth-of-type(57) {
transform: rotateZ(calc(6deg * 57));
}
section:nth-of-type(58) {
transform: rotateZ(calc(6deg * 58));
}
section:nth-of-type(59) {
transform: rotateZ(calc(6deg * 59));
}
section:nth-of-type(60) {
transform: rotateZ(calc(6deg * 60));
}
@-webkit-keyframes time {
to {
transform: rotateZ(360deg);
}
}
@keyframes time {
to {
transform: rotateZ(360deg);
}
}
Step 03 :- Creating javascript file
Javascript :-
var currentSec = getSecondsToday();
var seconds = (currentSec / 60) % 1;
var minutes = (currentSec / 3600) % 1;
var hours = (currentSec / 43200) % 1;
setTime(60 * seconds, "second");
setTime(3600 * minutes, "minute");
setTime(43200 * hours, "hour");
function setTime(left, hand) {
$(".clock__" + hand).css("animation-delay", "" + left * -1 + "s");
}
function getSecondsToday() {
let now = new Date();
let today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
let diff = now - today;
return Math.round(diff / 1000);
}
Result :-