JSFiddle - React, Tailwind, and code Playground
HTML
<div class="menu">
<ul>
<li>
Главная
</li><!--
--><li>
Раздел 1
<ul>
<li>Пункт 1</li>
<li>Пункт 2</li>
</ul>
</li><!--
--><li>
Раздел 2
<ul>
<li>Пункт 1</li>
</ul>
</li>
</ul>
<span id="left">⇐</span>
<span id="right">⇒</span>
</div>
CSS
.menu{
width:200px;
margin:0px 15px;
border-left:1px solid #bbb;
position:relative;
z-index:2;
}
.menu ul{
margin:0px;
padding:0px;
}
.menu li{
position:relative;
display:block;
margin:0px;
padding:0px;
text-align:center;
cursor:pointer;
}
.menu>ul{
white-space:nowrap;
position:relative;
}
.menu>ul>li{
display:inline-block;
width:99px;
border-right:1px solid #bbb;
}
.menu li>ul{
position:absolute;
left:-1px;
background:#fff;
border:1px solid #bbb;
min-width:100%;
display:none;
}
.menu li:hover>ul{
display:block;
}
.menu>span{
position:absolute;
top:0px;
cursor:pointer;
}
.menu>#left{
left:-15px;
}
.menu>#right{
right:-15px;
}
JavaScript
$(document).ready(function()
{
var menu_pos = 0;
var menu_item = $('.menu').innerWidth() / ($('.menu>ul>li').innerWidth() + 1);
var menu_length = $('.menu>ul').children().length;
menu(0);
$('#left').click(function()
{
menu(1);
});
$('#right').click(function()
{
menu(-1);
});
function menu(shift)
{
if(((menu_pos + shift) >= 0) && ((menu_pos + shift) <= (menu_length - menu_item)))
{
menu_pos += shift;
$('.menu>ul>li').each(function(n,elem)
{
if(n < menu_pos) $(elem).hide();
else if(n > (menu_pos + menu_item - 1)) $(elem).hide();
else $(elem).show();
});
}
}
});