JSFiddle - React, Tailwind, and code Playground
by Jordan Sayner
HTML
<div>
<input type="button" id="prev" value="<" />
<input type="button" id="next"value=">" />
<div id="bar">
<span>
<ul id="list">
<li>1</li> <li class="selected">2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
</ul>
</span>
</div>
</div>
CSS
div#bar
{
overflow: hidden;
margin-left: 20px;
margin-right: 20px;
}
div
{
position:relative;
}
span
{
overflow:visible;
display:block;
}
ul
{
display:inline-block;
white-space: nowrap;
overflow-x: visible;
overflow-y: visible;
}
li
{
display: inline-block;
}
input#prev
{
left: -10px;
position: absolute;
}
input#next
{
right: -10px;
position: absolute;
z-index: 2;
}
/* decorations. */
ul, span
{
margin: 0px;
padding: 0px;
}
span
{
border: 1px solid blue;
border-radius: 4px;
}
li
{
list-style: none;
padding: 2px;
background: #000;
color: #FFF;
border: 1px solid cyan;
border-top-style: none;
border-radius: 2px;
margin: 2px;
position: relative;
top: -3px;
box-shadow: 2px 2px 2px black;
}
li:before, li:after
{
font-weight: bold;
font-size: larger;
content: "::";
}
li.selected
{
background: #FFF;
color: #000;
}
JavaScript
jQuery.fn.cleanWhitespace = function() {
textNodes = this.contents().filter(
function() {
return (this.nodeType == 3 && !/\S/.test(this.nodeValue));
}).remove();
return this;
}
jQuery("ul#list").cleanWhitespace();
jQuery("input#next").click(function() {
jQuery("ul#list").append(jQuery("ul#list li:first-child"));
});
jQuery("input#prev").click(function() {
jQuery("ul#list").prepend(jQuery("ul#list li:last-child"));
});
jQuery("li").click(function(){
jQuery(this).siblings().removeClass("selected");
jQuery(this).addClass("selected");
});