JSFiddle - React, Tailwind, and code Playground
HTML
<div id="container">
<ul>
<li>
<span>..Scrolling Text..</span>
</li>
</ul>
</div>
CSS
#container {
background-color: red;
height: 30px;
overflow: hidden;
position: relative;
white-space: nowrap;
width: 300px;
}
ul {
float: left;
list-style: none;
margin: 0;
padding: 0;
position: absolute;
right: 0;
top: 5px;
white-space: nowrap;
-webkit-transition: right 0ms linear 0;
-moz-transition: right 0ms linear 0;
-o-transition: right 0ms linear 0;
transition: right 0ms linear 0;
/* Make Firefox happy */
-moz-transition-timing-function: linear;
transition-timing-function: linear;
}
li {
float: left;
}
li span {
display: inline-block;
padding: 0 10px;
}
JavaScript
var $inner, $originalContent,
contentWidth,
resize = true,
duration;
$(document).ready(init);
function init() {
var $container = $("#container");
$inner = $("ul", $container);
$originalContent = $("li", $inner);
contentWidth = $originalContent.outerWidth();
duration = Math.floor(contentWidth / 100) * 1000;
$inner.on("webkitTransitionEnd oTransitionEnd otransitionend transitionend", scroll);
scroll();
}
function scroll() {
if (resize) {
resize = false;
var c = ["green", "blue", "yellow"];
for (var i = 0; i < 3; i++) {
$inner.prepend($originalContent.clone().css("background-color", c[i]));
}
var totalWidth = $("li", $inner).length * contentWidth;
$inner.width(totalWidth + 1); // Make Firefox happy
}
// IE 10 won't set this after transition ends. Remains 0 after .css() call
$inner.css({ "right": "-" + contentWidth + "px" });
$inner.css("transitionDuration", "0ms");
setTimeout(function(){
$inner.css({ "transitionDuration": duration + "ms", "right": 0 });
}, 0);
}