Open In App
Related Articles

Create an Analog Clock using HTML, CSS and JavaScript

Improve Article
Save Article
Like Article

In this article, we are going to build a real-time analog clock using HTML, CSS, and JavaScript.


Approach: We will create three files (an HTML file, a CSS file, and JavaScript File), we also have an image of the clock that will be used in the background, and on top of that, we will make an hour, minute, and second hand (using HTML and CSS). These hands will rotate as per the system time (we will use the predefined Date function of JavaScript to calculate the degree of rotations of each hand).

  • HTML: It is a simple file having the basic structure of the webpage and ID for the clock’s body and for the second, minute, hour hands.
  • CSS: The CSS is used just for making the clock actually look a bit nicer. We have basically centered our clock in the middle of the webpage.
  • JavaScript: The JavaScript file will provide the logic behind the rotation of the hands.


  • First, we have selected the hour, minute, and second from HTML.
  • To get the current time we have used the Date() object provided by the JavaScript. This will give the current seconds, minutes, and hours respectively.
  • Now, we have got our hour, minute, and second, and we know that the clock rotates 360 degrees. So, we will convert to convert the rotation of the hands of the clock into degrees. The degree calculation is based on a simple unary method.


<!DOCTYPE html>
<html lang="en">
    <link rel="stylesheet" href="style.css">
    <script src="index.js"></script>
    <div id="clockContainer">
        <div id="hour"></div>
        <div id="minute"></div>
        <div id="second"></div>


#clockContainer {
    position: relative;
    margin: auto;
    height: 40vw;
    /*to make the height and width responsive*/
    width: 40vw;
    background: url(clock.png) no-repeat;
    /*setting our background image*/
    background-size: 100%;
#second {
    position: absolute;
    background: black;
    border-radius: 10px;
    transform-origin: bottom;
#hour {
    width: 1.8%;
    height: 25%;
    top: 25%;
    left: 48.85%;
    opacity: 0.8;
#minute {
    width: 1.6%;
    height: 30%;
    top: 19%;
    left: 48.9%;
    opacity: 0.8;
#second {
    width: 1%;
    height: 40%;
    top: 9%;
    left: 49.25%;
    opacity: 0.8;


setInterval(() => {
    d = new Date(); //object of date()
    hr = d.getHours();
    min = d.getMinutes();
    sec = d.getSeconds();
    hr_rotation = 30 * hr + min / 2; //converting current time
    min_rotation = 6 * min;
    sec_rotation = 6 * sec; = `rotate(${hr_rotation}deg)`; = `rotate(${min_rotation}deg)`; = `rotate(${sec_rotation}deg)`;
}, 1000);

Image used:×300.jpg

Output: Click here to see live code output

Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Last Updated : 22 May, 2023
Like Article
Save Article
Similar Reads
Related Tutorials