JSFiddle - React, Tailwind, and code Playground
by NickU
HTML
<div class="rowContainer">
<div id="header">
<div class="menuContainer opacity0">
<div class="menuLink" urlto="https://int.gainskeeper.com/1/01.html">Menu Item 1</div>
<div class="menuLink" urlto="https://int.gainskeeper.com/1/02.html">Long Menu Item 2</div>
<div class="menuLink" urlto="https://int.gainskeeper.com/1/03.html">Menu 3</div>
<div class="menuLink" urlto="https://int.gainskeeper.com/1/04.html">0004</div>
<div class="menuLink" urlto="https://int.gainskeeper.com/1/05.html">Menu Item 5</div>
<div class="menuLink" urlto="https://int.gainskeeper.com/1/06.html">Menu 6</div>
<div class="menuLink" urlto="https://int.gainskeeper.com/1/07.html">Menu 7</div>
<div class="menuLink" urlto="https://int.gainskeeper.com/1/08.html">Long Menu Item 008</div>
</div>
<div class="iconExileMenu displayNone">
</div>
<div class="exileMenuContainer displayNone">
</div>
</div>
<iframe class="greyOut" frameborder="0" style="border: 0px; width:100%;" name="id_iframeElement" id="id_iframeElement" scrolling="auto"></iframe>
CSS
/* Set root font size and family */
html, body
{
width: 100%;
height: 100%;
margin: 0;
padding: 0;
font-size: 16px;
font-family: 'Roboto', sans-serif;
}
/* Use "rem" for menuContainer font size */
.menuContainer
{
display: flex;
justify-content: space-between;
align-items: center;
background-color: #ffffff;
padding-top: 0.2rem;
padding-left: 0.5rem;
padding-right: 0.5rem;
color: #888;
position: relative;
font-size: 0.875rem;
letter-spacing: 0.003rem;
font-weight: 400;
color: #5f6368;
text-decoration: none !important;
font-family: "Google Sans",sans-serif;
width: calc( 100% - 85px);
margin: 0;
}
.menuLink
{
text-decoration: none;
color: #888;
margin: 0.25rem;
margin-left: 0.5rem;
margin-right: 0.5rem;
margin-bottom: 0;
padding-bottom: 0.5rem;
display:inline-block;
}
.menuLink.active, .menuLink.active:hover
{
font-weight: 500;
color: #1a73e8;
position: relative;
}
.menuLink:hover
{
color: #5f6368;
cursor: pointer;
}
.menuLink.active::after
{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
content: '';
transform-origin: center;
animation: growline 0.1s linear;
height: 3px;
width: 100%;
background: #1a73e8;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
@keyframes growline
{
0%
{
transform: scaleX(0.7);
}
100%
{
transform: scaleX(1);
}
}
.iconExileMenu
{
width: 21px;
height: 21px;
margin-right: 20px;
display: inline-block;
right: 0px;
top: 4px;
position: absolute;
cursor: pointer;
border-radius: 10px;
vertical-align: middle;
...
JavaScript
(function ($)
{
// Plugin ResponsiveMenuBar
function ResponsiveMenuBar(options)
{
var self = this;
self.defaults = {
funcClickOnActive: null,
showDebugInfo: true
};
self.opts = $.extend({}, self.defaults, options);
}
ResponsiveMenuBar.prototype = {
init: function ()
{
var self = this;
if ($('.menuContainer').length > 0)
{
self.whenStarted = Date.now();
self.run();
return true;
}
else
{
this.outDebug('ResponsiveMenuBar: .menuContainer was not found');
return false;
}
},
idleCallbackFunction: function (idleCallbackFunction)
{
var self = this;
if (typeof idleCallbackFunction === 'function')
if ('requestidleCallbackFunction' in window)
window.requestidleCallbackFunction(idleCallbackFunction, { timeout: 10 });
else
setTimeout(idleCallbackFunction, 10);
},
updateHiddenMenuLinkContainer: function ()
{
var self = this;
var menuContainer = $('.menuContainer');
var menuContainerWidth = menuContainer.width();
var menuContainerLinks = menuContainer.children('div').not('.hiddenMenuLinkContainer').not('.displayNone');
var totalWidth = 0;
var exileMenuContainer = $('.exileMenuContainer');
var hiddenMenuLinks = $('.hiddenMenuLinkContainer').not('.displayNone');
if (hiddenMenuLinks.length === 0)
$('.iconExileMenu').addClass('displayNone');
else
$('.iconExileMenu').removeClass('displayNone');
if (menuContainerLinks.length > 1)
{
if (menuContainer.hasScroll())
{
...