Answering late, there is idea to use counter in this case:
.test { position: relative; height: 20px; overflow: hidden; } .test::before { position: absolute; top: 100%; content: counter(before); animation: beforeCount 10s linear infinite, move 2s linear infinite; } .test::after { position: absolute; top: 100%; content: counter(after); animation: afterCount 10s -0.1s linear infinite, move 2s 1s linear infinite; } @-moz-keyframes beforeCount { 0% { counter-increment: before 0; } 10% { counter-increment: before 10; } 20% { counter-increment: before 20; } 30% { counter-increment: before 30; } 40% { counter-increment: before 40; } 50% { counter-increment: before 50; } 60% { counter-increment: before 60; } 70% { counter-increment: before 70; } 80% { counter-increment: before 80; } 90% { counter-increment: before 90; } } @-webkit-keyframes beforeCount { 0% { counter-increment: before 0; } 10% { counter-increment: before 10; } 20% { counter-increment: before 20; } 30% { counter-increment: before 30; } 40% { counter-increment: before 40; } 50% { counter-increment: before 50; } 60% { counter-increment: before 60; } 70% { counter-increment: before 70; } 80% { counter-increment: before 80; } 90% { counter-increment: before 90; } } @-o-keyframes beforeCount { 0% { counter-increment: before 0; } 10% { counter-increment: before 10; } 20% { counter-increment: before 20; } 30% { counter-increment: before 30; } 40% { counter-increment: before 40; } 50% { counter-increment: before 50; } 60% { counter-increment: before 60; } 70% { counter-increment: before 70; } 80% { counter-increment: before 80; } 90% { counter-increment: before 90; } } @keyframes beforeCount { 0% { counter-increment: before 0; } 10% { counter-increment: before 10; } 20% { counter-increment: before 20; } 30% { counter-increment: before 30; } 40% { counter-increment: before 40; } 50% { counter-increment: before 50; } 60% { counter-increment: before 60; } 70% { counter-increment: before 70; } 80% { counter-increment: before 80; } 90% { counter-increment: before 90; } } @-moz-keyframes afterCount { 0% { counter-increment: after 0; } 10% { counter-increment: after 10; } 20% { counter-increment: after 20; } 30% { counter-increment: after 30; } 40% { counter-increment: after 40; } 50% { counter-increment: after 50; } 60% { counter-increment: after 60; } 70% { counter-increment: after 70; } 80% { counter-increment: after 80; } 90% { counter-increment: after 90; } } @-webkit-keyframes afterCount { 0% { counter-increment: after 0; } 10% { counter-increment: after 10; } 20% { counter-increment: after 20; } 30% { counter-increment: after 30; } 40% { counter-increment: after 40; } 50% { counter-increment: after 50; } 60% { counter-increment: after 60; } 70% { counter-increment: after 70; } 80% { counter-increment: after 80; } 90% { counter-increment: after 90; } } @-o-keyframes afterCount { 0% { counter-increment: after 0; } 10% { counter-increment: after 10; } 20% { counter-increment: after 20; } 30% { counter-increment: after 30; } 40% { counter-increment: after 40; } 50% { counter-increment: after 50; } 60% { counter-increment: after 60; } 70% { counter-increment: after 70; } 80% { counter-increment: after 80; } 90% { counter-increment: after 90; } } @keyframes afterCount { 0% { counter-increment: after 0; } 10% { counter-increment: after 10; } 20% { counter-increment: after 20; } 30% { counter-increment: after 30; } 40% { counter-increment: after 40; } 50% { counter-increment: after 50; } 60% { counter-increment: after 60; } 70% { counter-increment: after 70; } 80% { counter-increment: after 80; } 90% { counter-increment: after 90; } } @-moz-keyframes move { 0% { top: 120%; } 100% { top: -120%; } } @-webkit-keyframes move { 0% { top: 120%; } 100% { top: -120%; } } @-o-keyframes move { 0% { top: 120%; } 100% { top: -120%; } } @keyframes move { 0% { top: 120%; } 100% { top: -120%; } }
<div class="test"></div>
stylus source is the following
.test position relative height 20px overflow hidden .test::before position absolute top 100% content counter(before) animation beforeCount 10s linear infinite, move 2s linear infinite .test::after position absolute top 100% content counter(after) animation afterCount 10s -0.1s linear infinite, move 2s 1s linear infinite @keyframes beforeCount for i in (0..9) {10% * i} counter-increment before (i * 10) @keyframes afterCount for i in (0..9) {10% * i} counter-increment after (i * 10) @keyframes move 0% top 120% 100% top -120%