Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Dancing Keys Effect using HTML and CSS

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

The dancing keys effect is a type of text-animation effect that can be implemented using CSS. In this effect, each letter is given the form of a keyboard key and then animations are applied to move it along either X-axis or Y-axis. This effect is also known as the Jumping Key effect or Piano Key effect. It is generally used in educational websites for kids to make learning fun and interactive.

Approach: The approach is to first design the key using some basic styling and then use keyframes to animate it along any one axis. The nth-child property can also be used to delay the animation of each key separately. This step is optional if one does not want any delay between keys.

HTML Code: In this HTML section, all the letters are wrapped inside the <span> tag which in turn is wrapped inside a <h1> tag.

HTML




<!DOCTYPE html>
<html lang="en">
 
<head>
    <title>
        DANCING KEY EFFECT
    </title>
</head>
 
<body>
    <h1>
        <span>G</span>
        <span>E</span>
        <span>E</span>
        <span>K</span>
        <span>S</span>
        <span>F</span>
        <span>O</span>
        <span>R</span>
        <span>G</span>
        <span>E</span>
        <span>E</span>
        <span>K</span>
        <span>S</span>
    </h1>
</body>
 
</html>

CSS Code: The CSS portion of the code can be defined as follows:

  • Step 1: Provide a basic background color. In this case, the green color is used.
  • Step 2: Create keys using a different background color and apply a box-shadows to easily differentiate between each key.
  • Step 3: Define the keyframes for the animation. The first frame has value of the translateY property as “0px”. The second frame it is moved by a small value like “-20px”. In the last frame it is brought back to 0, creating a looped animation.
  • Step 4 (Optional): Use n-th child property to specify some delay in animation of each of the keys.

Tip: One can choose any value for the translateY property but one has to sure to keep value as 0 for the first and last frames. There is also no restriction on number of frames in between the first and last frames of the animation.

CSS Code:

HTML




<style>
    body {
        background: green;
    }
 
    h1 {
        position: absolute;
        top: 50%;
        left: 10%;
    }
 
    h1 span {
        color: #262626;
        background: #fff;
        padding: 10px 20px;
        display: table-cell;
        box-shadow: inset 0 0 5px
            rgba(0, 0, 0, 0.3),
                0 5px 0 #ccc;
        animation: animate 0.5s infinite;
    }
 
    /* Specify the animation keyframes
        to be used to move the letters */
    @keyframes animate {
        0% {
            transform: translateY(0px);
        }
 
        50% {
            transform: translateY(-20px);
        }
 
        100% {
            transform: translateY(0px);
        }
    }
 
    /* Specify a slight delay for
        each of the letters */
    h1 span:nth-child(1) {
        animation-delay: 0.1s;
    }
 
    h1 span:nth-child(2) {
        animation-delay: 0.2s;
    }
 
    h1 span:nth-child(3) {
        animation-delay: 0.3s;
    }
 
    h1 span:nth-child(4) {
        animation-delay: 0.4s;
    }
 
    h1 span:nth-child(5) {
        animation-delay: 0.5s;
    }
 
    h1 span:nth-child(6) {
        animation-delay: 0.6s;
    }
 
    h1 span:nth-child(7) {
        animation-delay: 0.7s;
    }
 
    h1 span:nth-child(8) {
        animation-delay: 0.8s;
    }
 
    h1 span:nth-child(9) {
        animation-delay: 0.9s;
    }
 
    h1 span:nth-child(10) {
        animation-delay: 1s;
    }
 
    h1 span:nth-child(11) {
        animation-delay: 1.1s;
    }
 
    h1 span:nth-child(12) {
        animation-delay: 1.2s;
    }
 
    h1 span:nth-child(13) {
        animation-delay: 1.3s;
    }
</style>

Complete Code: In this section, we will combine the above two sections to make the dancing keys effect using HTML and CSS.

HTML




<!DOCTYPE html>
<html lang="en">
<head>
  <title>
    DANCING KEY EFFECT
  </title>
  <style>
    body {
      background: green;
    }
 
    h1 {
      position: absolute;
      top: 50%;
      left: 10%;
    }
 
    h1 span {
      color: #262626;
      background: #fff;
      padding: 10px 20px;
      display: table-cell;
      box-shadow: inset 0 0 5px
                  rgba(0, 0, 0, 0.3),
                  0 5px 0 #ccc;
      animation: animate 0.5s infinite;
    }
 
    /* Specify the animation keyframes
       to be used to move the letters */
    @keyframes animate {
      0% {
        transform: translateY(0px);
      }
 
      50% {
        transform: translateY(-20px);
      }
 
      100% {
        transform: translateY(0px);
      }
    }
 
    /* Specify a slight delay for
       each of the letters */
    h1 span:nth-child(1) {
      animation-delay: 0.1s;
    }
 
    h1 span:nth-child(2) {
      animation-delay: 0.2s;
    }
 
    h1 span:nth-child(3) {
      animation-delay: 0.3s;
    }
 
    h1 span:nth-child(4) {
      animation-delay: 0.4s;
    }
 
    h1 span:nth-child(5) {
      animation-delay: 0.5s;
    }
 
    h1 span:nth-child(6) {
      animation-delay: 0.6s;
    }
 
    h1 span:nth-child(7) {
      animation-delay: 0.7s;
    }
 
    h1 span:nth-child(8) {
      animation-delay: 0.8s;
    }
 
    h1 span:nth-child(9) {
      animation-delay: 0.9s;
    }
 
    h1 span:nth-child(10) {
      animation-delay: 1s;
    }
 
    h1 span:nth-child(11) {
      animation-delay: 1.1s;
    }
 
    h1 span:nth-child(12) {
      animation-delay: 1.2s;
    }
 
    h1 span:nth-child(13) {
      animation-delay: 1.3s;
    }
  </style>
</head>
<body>
  <h1>
    <span>G</span>
    <span>E</span>
    <span>E</span>
    <span>K</span>
    <span>S</span>
    <span>F</span>
    <span>O</span>
    <span>R</span>
    <span>G</span>
    <span>E</span>
    <span>E</span>
    <span>K</span>
    <span>S</span>
  </h1>
</body>
</html>

Output: 


My Personal Notes arrow_drop_up
Last Updated : 01 Sep, 2021
Like Article
Save Article
Similar Reads
Related Tutorials