CSS3 has been around for a few years now and what an impact it has made on web design. In the first tutorial we will be animating a Grandfather clock.
Basic HTML Page
First you need to create the basic HTML page with just a few lines of code. There are five parts of the clock included here:
- Clock body
- Clock dial
- Hour hand
- Minute hand
- Pendulum
<div id="clockBody">
<div id="clockDial">
<div id="hourHand"></div>
<div id="minuteHand"></div>
</div>
<div id="pendulum"></div>
</div>
Add CSS to style the clock
Next you add the CSS code to create the basic shapes for the clock. Using the CSS3 border-radius to create circles from the default square div tags. See the working example here
#clockBody{
width: 200px;
height: 700px;
border: 2px solid darkred;
background-color: saddlebrown;
padding-top: 50px;
}
#clockDial{
width: 120px;
height: 120px;
border-radius: 90px;
background-color: ivory;
border: 1px solid orange;
margin: 0 auto;
}
#hourHand{
width: 8px;
height: 40px;
background-color: #222;
position: absolute;
left: 105px;
top: 120px;
}
#minuteHand{
width: 15px;
height: 60px;
background-color: red;
position: absolute;
left: 105px;
top: 120px;
}
#pendulum{
width: 9px;
height: 220px;
background-color: darkorange;
position: absolute;
left: 110px;
}
Animate the clock hands
Now we make the clock hands rotate using keyframes. As a test we don’t use real time, so the hands will move faster than a real clock. Edit the animation-duration property to change the rotation speed.
@-moz-keyframes hourTick{
from{ -moz-transform:rotate(0deg)}
to{ -moz-transform:rotate(360deg)}
}
@-webkit-keyframes swingTick{
0% {-webkit-transform:rotate(15deg) }
50% { -webkit-transform:rotate(-15deg) }
100% { -webkit-transform:rotate(15deg)}
}
@-moz-keyframes swingTick{
from{ -moz-transform:rotate(0deg)}
to{ -moz-transform:rotate(360deg)}
}
#hourHand{
width: 8px;
height: 40px;
background-color: #222;
position: absolute;
left: 105px;
top: 120px;
/*CSS3 animation code*/
-webkit-transform-origin: 4px 0px;
-moz-transform-origin: 4px 0px;
-moz-animation-timing-function: linear;
-webkit-animation-timing-function:linear;
-webkit-animation-iteration-count: infinite;
-webkit-animation-name: hourTick;
-moz-animation-name: hourTick;
-webkit-animation-duration: 600s;
-moz-animation-duration: 600s;
}
#minuteHand{
width: 15px;
height: 60px;
background-color: red;
position: absolute;
left: 105px;
top: 120px;
/*CSS3 animation code*/
-webkit-transform-origin: 2px 0px;
-moz-transform-origin: 2px 0px;
-moz-animation-timing-function: linear;
-webkit-animation-timing-function:linear;
-webkit-animation-iteration-count: infinite;
-webkit-animation-name: minuteTick;
-moz-animation-name: minuteTick;
-webkit-animation-duration: 60s;
-moz-animation-duration: 60s;
}
Make the pendulum swing
Next we animate the pendulum using the animation-timing-function’s ease-in-out property. This adds realistic movement with acceleration effects of gravity
#pendulum{
width: 9px;
height: 220px;
background-color: darkorange;
position: absolute;
left: 110px;
/*CSS3 animation code*/
-webkit-transform-origin: 4px 0px;
-moz-transform-origin: 0px 0px;
-moz-animation-timing-function: ease-in-out;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-animation-name: swingTick;
-moz-animation-name: swingTick;
-webkit-animation-duration: 2s;
-moz-animation-duration: 2s;
}
Add the images
Finally we add the graphic elements that make the clock more realistic. The images are vector based and create a simple, 2D animation. The clock body and dial use CSS background images while the pendulum and clock hands are images inserted into the HTML code.
#clockBody{
width: 200px;
height: 500px;
border: 2px solid saddlebrown;
background-color: sandybrown;
padding-top: 50px;
background-image: url("http://www.portfour.com/homepage/wp-content/uploads/2014/07/clock_body.png");
background-size: 200px;
background-repeat: no-repeat;
}
#clockDial{
width: 120px;
height: 120px;
border-radius: 90px;
background-color: ivory;
border: 1px solid orange;
margin: 0 auto;
background-image: url("http://www.portfour.com/homepage/wp-content/uploads/2014/07/dial.png");
background-size: 120px;
}
#hourHand{
width: 8px;
height: 40px;
background-color: transparent;
position: absolute;
left: 108px;
top: 120px;
-webkit-transform-origin: 4px 0px;
-moz-transform-origin: 4px 0px;
-moz-animation-timing-function: linear;
-webkit-animation-timing-function:linear;
-webkit-animation-iteration-count: infinite;
-webkit-animation-name: hourTick;
-moz-animation-name: hourTick;
-webkit-animation-duration: 600s;
-moz-animation-duration: 600s;
}
#hourHand img{
position: relative;
top: -8px;
left: 0px;
}
#minuteHand{
width: 6px;
height: 60px;
background-color: transparent;
position: absolute;
left: 110px;
top: 120px;
-webkit-transform-origin: 4px 0px;
-moz-transform-origin: 4px 0px;
-moz-animation-timing-function: linear;
-webkit-animation-timing-function:linear;
-webkit-animation-iteration-count: infinite;
-webkit-animation-name: minuteTick;
-moz-animation-name: minuteTick;
-webkit-animation-duration: 60s;
-moz-animation-duration: 60s;
}
#minuteHand img{
position: relative;
top: -10px;
left: 0px;
}
#pendulum{
width: 9px;
height: 220px;
background-color: transparent;
position: absolute;
left: 110px;
-webkit-transform-origin: 0px 0px;
-moz-transform-origin: 0px 0px;
-moz-animation-timing-function: ease-in-out;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-animation-name: swingTick;
-moz-animation-name: swingTick;
-webkit-animation-duration: 2s;
-moz-animation-duration: 2s;
}
#pendulum img{
position: relative;
left: -24px;
}
