Awesome CSS3 animated header

You can now create stunning animations with CSS3. But, I bet you know that. The keyword when it comes about CSS3 animations is the CSS3 @keyframes rule and in this article you will learn how to create an awesome CSS3 animated header using it.

CSS3 animated header

View demo

… also, you can download the .psd concept.


The markup is minimal and quite self explanatory. Please, don’t blame me for divitis. :)

<div class="header">
<div class="wrapper">
<div class="christmas-tree tree1"></div>
<div class="christmas-tree tree2"></div>
<div class="christmas-tree tree3"></div>
<div class="snowman"></div>
<div class="christmas-tree tree4"></div>
<div class="christmas-tree tree5"></div>
<div class="christmas-tree tree6"></div>

Image resources

Below, you can find the images you will use in order to create the header:

Header images


As you read at the beginning of this article, the @keyframes rule does all the magic. Also, to keep the following code as clean as possible, I will not add the prefixed versions too (-moz-, -webkit-, -ms-).

You can find the full CSS3 code when viewing page source for the demo.

Header background

To achieve the snow effect, you will need to animate the background-position property for the first .header background. As a quick note, for the browsers that do not support multiple backgrounds, the snow will not be visible for this example.

margin: 0 0 30px;
background: url(header-bg.png);
background: url(snow-bg.png) repeat-y center, url(header-bg.png);
animation: animate-snow 9s linear infinite;

@keyframes animate-snow
0% { background-position: center 0, 0 0;}
100% { background-position: center 885px, 0 0;}

Header wrapper

The .wrapper element basically holds all our Christmas trees together with the snowman. Please note the position: relative declaration:

width: 960px;
height: 315px;
margin: auto;
overflow: hidden;
position: relative;
background: url(wrapper-bg.png) no-repeat bottom;

Animated header example

For the Christmas trees, the animation-duration value was randomly changed in order to create a cool effect:

@keyframes animate-drop {   
0% {opacity:0;transform: translate(0, -315px);}
100% {opacity:1;transform: translate(0, 0);}

.snowman {
position: absolute;
animation: animate-drop 1s linear;

.christmas-tree {
width: 112px;
height: 137px;
background: url(christmas-tree.png);

.snowman {
width: 115px;
height: 103px;
top: 195px;
left: 415px;
background: url(snowman.png);
animation-duration: .6s;

.tree1 {
top: 165px;
left: 35px;
animation-duration: .6s;

.tree2 {
left: 185px;
top: 175px;
animation-duration: .9s;

.tree3 {
left: 340px;
top: 125px;
animation-duration: .7s;

.tree4 {
left: 555px;
top: 155px;
animation-duration: .8s;

.tree5 {
left: 710px;
top: 170px;
animation-duration: .7s;

.tree6 {
left: 855px;
top: 125px;
animation-duration: .6s;

Browser support

Here’s the support at this time: Firefox 5+, IE 10+, Chrome 6+, Safari 5+. For non-supported browsers, you don’t have to worry, everything will be just fine as long as you provide decent fallbacks.

Why to use animations?

Simple answer: to draw the user’s attention. Get inspired by another example, here is one of my previous articles, where I also used CSS3 keyframes: Cool notification messages with CSS3 & jQuery.

Happy Holidays!

We’re getting close to New Year’s and, with this article, I want to wish you all the best and Happy Holidays. Thank you all for reading my articles!