JSFiddle - React, Tailwind, and code Playground
by halirgb
HTML
<div class="navbar">
<div class="sum-dumb-logo"></div>
<ul class="menu menu-normal">
<li><a href="">Lorem ipsum</a></li>
<li><a href="">Lorem ipsum</a></li>
<li><a href="">Lorem ipsum</a></li>
<li><a href="">Lorem ipsum</a></li>
<li><a href="">Lorem ipsum</a></li>
</ul>
<button class="open-corrected-menu">Show All</button>
</div>
CSS
ul.menu.menu-normal{
list-style:none;
padding:0;
margin:0;
float:right;
}
.open-corrected-menu{
display:none;
}
ul.menu.menu-normal li{
display:inline-block;
background-color:red;
padding:5px 7px;
margin-right: -4px;
}
ul.menu.menu-normal li:last-child{
margin-right:0;
}
.add-menu-item{
position:fixed;
bottom:20px;
left:40px;
}
/*Menu modal for people hwo neen 1000mil item in the navbar*/
.mask {
background-color:rgba(0, 0, 0, 0.5);
position:fixed;
height:100%;
width:100%;
top:0;
left:0;
}
.menu-correction {
position:fixed;
z-index:9999;
width:300px;
left:50%;
top:20px;
bottom:20px;
margin-left:-150px;
background-color:#fff;
overflow-x:auto;
display:none;
}
ul.menu-correction {
list-style:none;
padding:0
}
ul.menu-correction li a {
color:#111;
text-transform:uppercase;
font-family:arial;
text-decoration:none;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-ms-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
font-family:'Open Sans', sans-serif;
display:block;
padding:5px 0 5px 5px;
margin-bottom:5px;
}
ul.menu-correction li a:hover {
color:#fff;
background-color:#555;
}
JavaScript
// Get menu width of menu
var getMenuWidth = function(){
var menuWidth = 0;
$(".menu li").each(function(){
menuWidth += $(this).innerWidth();
});
return menuWidth;
}
var menuWidth = getMenuWidth()
// show/hide menu
var menuMagic = function(menuWidth){
var windowWidth = $(window).innerWidth() - 20;
if(menuWidth > windowWidth){
$('.menu').removeClass('menu-normal');
$('.menu').addClass('menu-correction').hide();
$('.open-corrected-menu').show();
}else{
$('.menu').removeClass('menu-correction');
$('.menu').addClass('menu-normal').show();
$('.open-corrected-menu').hide();
}
}
//menu popup
$('.open-corrected-menu').click(function () {
$('body').css('overflow', 'hidden');
$('body').append('<div class="mask" style="display:none"></div>');
$('.mask').fadeIn(200, function () {
$('.menu-correction').fadeIn().addClass('menu-visible');
});
});
// hide if mask is clicked
$(document).on('click','.mask', function () {
$('.menu-correction').fadeOut(function () {
$(this).removeClass('menu-visible');
$('body').css('overflow', 'auto');
$('.mask').fadeOut(function(){
$(this).remove();
});
menuMagic(menuWidth);
});
});
// call on load
menuMagic(menuWidth);
// call on resize
$(window).resize(function(){
// only call if menu is not visible
if(!$('.menu-correction').hasClass('menu-visible')){
menuMagic(menuWidth);
}
});