<style> div { width: 50px; height: 50px; background-color: yellow; } div.green { width: 100px; background-color: green; -webkit-transition-property: background-color; -webkit-transition-duration: 5s; } div.square { width: 100px; height: 100px; -webkit-transition-property: height; -webkit-transition-duration: 2s; } </style> <p id="instructions"> When you click the Change button, the shape will <span id="description"></span>. <button style="display: block;" onclick="transition()">Change</button> </p> <div id="target"></div> <script> var state = 0; var transitions = [ {className:"green", description:"instantly change into a rectangle and fade from yellow to green over 5 seconds"}, {className:"", description:"instantly change into a small yellow square"}, {className:"square", description:"instantly change into a yellow rectangle and then animate into a big yellow square over 2 seconds"}, {className:"green", description:"instantly change into a yellow rectangle and then animate to a green rectangle over 5 seconds"}, {className:"", description:"instantly change into a small yellow square"}, {className:"green", description:"instantly change into a yellow rectangle and fade from yellow to green over 5 seconds"}, {className:"square", description:"instantly change to a yellow rectangle and then animate into a large yellow square over 2 seconds"}, {className:"", description:"instantly change into a small yellow square"} ]; document.getElementById("description").innerText = transitions[0].description; function transition() { var target = document.getElementById("target"); target.className = transitions[state].className; state++; if (state < transitions.length) document.getElementById("description").innerText = transitions[state].description; else { document.getElementById("instructions").innerText = "Done."; } } </script>