<!doctype html> <html lang="en"> <head> <style> .wrapper { margin-bottom: 20px; } .wrapper div { height: 18px; width: 200px; color: white; } .expected { background-color: red; } .animated { background-color: green; /* This timing function has value 0 at inputs of 1/3 and 2/3. Chosen because it's very asymmetric about x = y. */ -webkit-animation: move 3000000s 2 cubic-bezier(0.333333, 0.333333, 0.666666, -0.833333) forwards; margin-bottom: 4px; } .delay_zero { -webkit-animation-delay: 0s; } .delay_one_third { -webkit-animation-delay: -1000000s; } .delay_two_thirds { -webkit-animation-delay: -2000000s; } .delay_three_thirds { -webkit-animation-delay: -3000000s; } .delay_four_thirds { -webkit-animation-delay: -4000000s; } .delay_five_thirds { -webkit-animation-delay: -5000000s; } .delay_six_thirds { -webkit-animation-delay: -6000000s; } .expected { -webkit-transform: translateX(100px); } #normal .expected.delay_six_thirds { -webkit-transform: translateX(200px); } #alternate .expected.delay_three_thirds { -webkit-transform: translateX(200px); } #reverse .expected.delay_zero, #reverse .expected.delay_three_thirds { -webkit-transform: translateX(200px); } #alternate-reverse .expected.delay_zero, #alternate-reverse .expected.delay_six_thirds { -webkit-transform: translateX(200px); } #normal div { -webkit-animation-direction: normal; } #alternate div { -webkit-animation-direction: alternate; } #reverse div { -webkit-animation-direction: reverse; } #alternate-reverse div { -webkit-animation-direction: alternate-reverse; } @-webkit-keyframes move { from { -webkit-transform: translateX(100px); } to { -webkit-transform: translateX(200px); } } </style> </head> <body> <div> Tests animation direction with timing functions and hardware acceleration. The green boxes use live animations and each should line up with the red box immediately above it. </div> <div class="wrapper" id="normal"> <div class="expected delay_zero">normal</div> <div class="animated delay_zero">normal</div> <div class="expected delay_one_third">normal</div> <div class="animated delay_one_third">normal</div> <div class="expected delay_two_thirds">normal</div> <div class="animated delay_two_thirds">normal</div> <div class="expected delay_three_thirds">normal</div> <div class="animated delay_three_thirds">normal</div> <div class="expected delay_four_thirds">normal</div> <div class="animated delay_four_thirds">normal</div> <div class="expected delay_five_thirds">normal</div> <div class="animated delay_five_thirds">normal</div> <div class="expected delay_six_thirds">normal</div> <div class="animated delay_six_thirds">normal</div> </div> <div class="wrapper" id="alternate"> <div class="expected delay_zero">alternate</div> <div class="animated delay_zero">alternate</div> <div class="expected delay_one_third">alternate</div> <div class="animated delay_one_third">alternate</div> <div class="expected delay_two_thirds">alternate</div> <div class="animated delay_two_thirds">alternate</div> <div class="expected delay_three_thirds">alternate</div> <div class="animated delay_three_thirds">alternate</div> <div class="expected delay_four_thirds">alternate</div> <div class="animated delay_four_thirds">alternate</div> <div class="expected delay_five_thirds">alternate</div> <div class="animated delay_five_thirds">alternate</div> <div class="expected delay_six_thirds">alternate</div> <div class="animated delay_six_thirds">alternate</div> </div> <div class="wrapper" id="reverse"> <div class="expected delay_zero">reverse</div> <div class="animated delay_zero">reverse</div> <div class="expected delay_one_third">reverse</div> <div class="animated delay_one_third">reverse</div> <div class="expected delay_two_thirds">reverse</div> <div class="animated delay_two_thirds">reverse</div> <div class="expected delay_three_thirds">reverse</div> <div class="animated delay_three_thirds">reverse</div> <div class="expected delay_four_thirds">reverse</div> <div class="animated delay_four_thirds">reverse</div> <div class="expected delay_five_thirds">reverse</div> <div class="animated delay_five_thirds">reverse</div> <div class="expected delay_six_thirds">reverse</div> <div class="animated delay_six_thirds">reverse</div> </div> <div class="wrapper" id="alternate-reverse"> <div class="expected delay_zero">alternate-reverse</div> <div class="animated delay_zero">alternate-reverse</div> <div class="expected delay_one_third">alternate-reverse</div> <div class="animated delay_one_third">alternate-reverse</div> <div class="expected delay_two_thirds">alternate-reverse</div> <div class="animated delay_two_thirds">alternate-reverse</div> <div class="expected delay_three_thirds">alternate-reverse</div> <div class="animated delay_three_thirds">alternate-reverse</div> <div class="expected delay_four_thirds">alternate-reverse</div> <div class="animated delay_four_thirds">alternate-reverse</div> <div class="expected delay_five_thirds">alternate-reverse</div> <div class="animated delay_five_thirds">alternate-reverse</div> <div class="expected delay_six_thirds">alternate-reverse</div> <div class="animated delay_six_thirds">alternate-reverse</div> </div> </body> </html>