JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<div class="app">
<div class="content">
content
<button id="collapseBtn" onclick="toggleCollapseMenu()">
collapse
</button>
</div>
<div id="mainMenu" class="menu">
<div class="menu-container">
<ul>
<li>
<a>
<div class="nav-link-container">
<span class="nav-link-icon"><i class="fas fa-home"></i></span>
<span class="nav-link-text">One two</span>
</div>
</a>
</li>
<li>
<a>
<div class="nav-link-container">
<span class="nav-link-icon"><i class="fas fa-home"></i></span>
<span class="nav-link-text">One two three</span>
</div>
</a>
</li>
<li>
<a>
<div class="nav-link-container">
<span class="nav-link-icon"><i class="fas fa-home"></i></span>
<span class="nav-link-text">One two three four</span>
</div>
</a>
</li>
<li>
<a>
<div class="nav-link-container">
<span class="nav-link-text">no icon</span>
</div>
</a>
</li>
<li>
<a>
<div class="nav-link-container">
<span class="nav-link-text">no icon</span>
</div>
</a>
</li>
<li>
<a>
<div class="nav-link-container">
<span class="nav-link-text">no icon</span>
</div>
</a>
</li>
<li>
<a>
<div class="nav-link-container">
<span...
CSS
:root {
--height: 150px;
}
html,
body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
a {
text-decoration: none;
}
.app {
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
#collapseBtn {
display: inline-block;
cursor: pointer;
background-color: black;
color: white;
padding: 0.5rem;
box-sizing: border-box;
position: fixed;
top: 0;
z-index: 999;
border: unset;
width: 200px;
height: 100px;
}
#collapseBtn:hover {
background-color: gray;
}
.menu,
.content {
width: 100%;
}
.menu {
background-color: black;
transition: height 0.8s ease-in;
height: var(--height);
overflow: hidden;
}
.content {
background-color: burlywood;
flex: 1;
overflow: auto;
margin: auto;
}
.menu-container {
overflow-y: hidden;
overflow-x: auto;
height: 100%;
width: 100%;
height: var(--height);
position: absolute;
bottom: 0;
-webkit-transition: height 0.2s ease-in;
-moz-transition: height 0.2s ease-in;
-o-transition: height 0.2s ease-in;
transition: height 0.2s ease-in;
}
.menu-container ul {
background-color: #587c34;
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 100%;
padding: 1rem;
box-sizing: border-box;
min-width: 100%;
width: 100%;
margin: auto;
}
.menu-container ul li {
min-width: var(--height);
border: 1px solid white;
box-sizing: border-box;
height: 100%;
max-height: var(--height);
}
.menu-container ul li a {
display: block;
width: 100%;
height: 100%;
padding: 0.2rem;
box-sizing: border-box;
}
.menu-container .nav-link-container {
display: flex;
flex-direction: column;
background-color: #f55858;
justify-content: center;
text-align: center;
align-items: center;
height: 100%;
justify-content: start;
}
.menu-container span.nav-link-icon {
background-color: magenta;
font-size:...
JavaScript
function toggleCollapseMenu() {
document.getElementById("mainMenu").classList.toggle("uncollapsed");
}