I need accordion menu in the mobile devices (below 991px screens) and using bootstrap, it works good in desktop which is normal simple menu i.e. opening sub-menu on hover of the parent link, but on mobile i need the sub-menu opening and closing like the accordion, i have achieve this using a little script but
- While refreshing in the desktop and resizing the browser below 991px the sub-menu is not visible in the menu,
- After refreshing in the mobile screen (below 991px) it will be there.
So i need the script to work on single refresh whether it’s desktop or mobile, menu of the sub-menu in the mobile should work within a single refresh no matter where we have refresh the screen on mobile or desktop. I have also triedmathchMedia
but it is not working so i have removed it from the example. I have created following link in the codepen for the reference,
codepen (https://codepen.io/Akash_Ramani/pen/jOjYYJz)
The following is the code.
$("button.close-btn").click(function() {
$(".navbar-collapse").removeClass("show");
});
if ($(window).width() <= 991) {
$(".navbar-nav li.menu-item-has-children").append(
'<span class="collased-icon"></span>'
);
$(".navbar-nav li.menu-item-has-children > .collased-icon").on(
"click",
function() {
$(this).prev(".sub-menu").slideToggle(350);
$(this).toggleClass("expand");
}
);
}
body {
font-family: "Poppins", sans-serif;
font-weight: 400;
-webkit-text-stroke: 1px transparent;
overflow-x: hidden;
background: #fbf9ec;
}
header .container-fluid {
padding: 0 120px;
}
header {
position: absolute;
z-index: 1045;
width: 100%;
-webkit-transition: 0.4s;
-ms-transition: 0.4s;
transition: 0.4s;
padding: 10px 0;
background: #000;
}
#navbarNav.collapse:not(.show) {
display: block;
}
.navbar-brand svg {
transition: 0.4s;
fill: #fff;
width: 220px;
height: auto;
}
.navbar-brand svg:hover {
fill: #febf01;
}
.navbar-brand img {
width: 100px;
height: auto;
-webkit-transition: 0.3s;
-ms-transition: 0.3s;
transition: 0.3s;
}
.navbar-brand img:hover {
filter: hue-rotate(175deg);
}
.navbar-nav>li>a {
color: #fff;
font-size: 20px;
}
.navbar-expand-lg .navbar-nav {
gap: 20px;
}
.navbar-nav>li {
display: inline-block;
margin-bottom: 0;
position: relative;
}
.navbar-nav>li>a:hover,
.navbar-nav>li:hover>a.nav-link,
.navbar-nav>li>a:focus,
.navbar-nav>li.current-menu-item>a,
.navbar-nav>li.current-menu-parent>a,
.navbar-nav>li.current-menu-ancestor>a,
.navbar-nav>li.current_page_parent>a,
.navbar-nav>li>a.nav-link.active {
color: #febf01;
}
.navbar-nav>li.menu-item-has-children .sub-menu li a:hover,
.navbar-nav>li ul.sub-menu li:hover>a,
.navbar-nav>li ul.sub-menu li.current-menu-item>a,
.navbar-nav>li ul.sub-menu li.current-menu-ancestor>a {
background: linear-gradient(-45deg, #d09c00 0%, #000 100%);
color: #032647;
}
.navbar-nav>li.menu-item-has-children .sub-menu {
position: absolute;
pointer-events: none;
background: linear-gradient(180deg, #000 0%, #d09c00 100%);
left: 0;
right: 0;
top: 25px;
z-index: 2;
width: 238px;
margin-top: 0;
box-shadow: 0 20px 40px 0 rgba(0, 0, 0, 0.2);
transition-delay: 0.35s;
opacity: 0;
-webkit-transform: translate(0, 5px) rotateX(-90deg);
-ms-transform: translate(0, 5px) rotateX(-90deg);
transform: translate(0, 5px) rotateX(-90deg);
transform-origin: top center;
-webkit-transition: opacity 200ms ease-in, transform 200ms ease-in, visibility 200ms ease-in;
-ms-transition: opacity 200ms ease-in, transform 200ms ease-in, visibility 200ms ease-in;
transition: opacity 200ms ease-in, transform 200ms ease-in, visibility 200ms ease-in;
font-size: 15px;
font-weight: 400;
list-style: none;
padding: 0;
}
.navbar-nav>li.menu-item-has-children:hover>.sub-menu {
opacity: 1;
-webkit-transform: translate(0, 20px) rotateX(0deg);
-ms-transform: translate(0, 20px) rotateX(0deg);
transform: translate(0, 20px) rotateX(0deg);
pointer-events: all;
}
.navbar-nav>li.menu-item-has-children .sub-menu li {
margin-bottom: 0;
position: relative;
}
.navbar-nav>li.menu-item-has-children .sub-menu li>a.nav-link {
color: #fff;
font-size: 18px;
text-transform: uppercase;
}
.navbar-nav>li.menu-item-has-children .sub-menu .sub-menu {
left: 100%;
top: 0;
}
.navbar-nav>li.menu-item-has-children:hover>.sub-menu li.menu-item-has-children:hover>.sub-menu {
opacity: 1;
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
transform: translate(0, 0);
pointer-events: all;
left: 100%;
top: 0;
}
.navbar-nav>li.menu-item-has-children .sub-menu li+li {
border-top: 1px solid #ffffff87;
}
.navbar-nav>li ul.sub-menu li.menu-item-has-children::before {
position: absolute;
content: "";
border: 2px solid #fff;
width: 12px;
height: 12px;
right: 15px;
border-left: 0;
border-top: 0;
top: 50%;
transform: translateY(-50%) rotate(-45deg);
}
button.close-btn {
display: none;
cursor: pointer;
}
@media screen and (max-width: 1599px) {
header .container-fluid {
padding: 0 90px;
}
.navbar-brand svg {
width: 200px;
}
}
@media screen and (max-width: 1199px) {
header .container-fluid {
padding: 0 60px;
}
}
@media screen and (max-width: 991px) {
header .container-fluid {
padding: 0 30px;
}
.navbar-brand svg {
width: 150px;
}
.navbar-expand-lg .navbar-nav {
gap: 10px;
}
.navbar-toggler {
width: 40px;
height: 40px;
background: linear-gradient(0deg, #473303 0%, #febf01 50%, #473303 100%);
border: 0 solid transparent;
padding: 4px 8px;
-webkit-transition: 0.3s;
-ms-transition: 0.3s;
transition: 0.3s;
background-size: auto 200%;
}
.navbar-toggler:hover {
background-position: 100%;
}
.navbar-toggler .navbar-line {
border-bottom: 1px solid #fff;
float: left;
width: 100%;
padding: 0;
line-height: 1;
-webkit-transition: 0.3s;
-ms-transition: 0.3s;
transition: 0.3s;
}
.navbar-toggler .navbar-line+.navbar-line {
margin-top: 5px;
}
.collapse:not(.show) {
display: none;
}
.navbar-collapse {
padding: 0;
position: fixed;
width: 260px;
background: linear-gradient(0deg, #fcbd01 0%, #000 100%);
left: -360px;
top: 0;
z-index: 11;
-ms-transition: 0.4s;
-webkit-transition: 0.4s;
transition: 0.4s;
height: 100% !important;
border: 0;
display: block;
overflow: auto;
box-shadow: 0 0 10px 4px rgba(0, 0, 0, 0.5);
}
.navbar .collapse.show {
left: 0;
}
ul.navbar-nav {
padding-top: 40px;
}
.navbar-expand-lg .navbar-nav {
gap: 0;
}
.navbar-nav>li.menu-item-has-children .sub-menu {
background: linear-gradient(0deg, #313131 0%, #ca9700 100%);
display: none;
position: relative;
transform-origin: initial;
-webkit-transform: none;
-ms-transform: none;
transform: none;
width: 100%;
top: 0;
opacity: 1;
}
.navbar-nav>li.menu-item-has-children .sub-menu li>a.nav-link {
font-size: 18px;
text-transform: initial;
padding: 11px 20px;
line-height: 1;
}
.navbar-nav>li ul.sub-menu li.menu-item-has-children::before {
display: none;
}
.navbar-nav>li.menu-item-has-children:hover>.sub-menu {
display: none;
-webkit-transform: none;
-ms-transform: none;
transform: none;
pointer-events: all;
}
.navbar-nav>li>a {
font-size: 16px;
padding: 8px 15px;
}
.navbar-nav>li+li {
border-top: 1px solid #ffffff54;
}
.navbar-nav li.menu-item-has-children>a {
width: calc(100% - 40px);
position: relative;
z-index: 0;
}
.navbar-nav li.menu-item-has-children span.collased-icon {
position: absolute;
content: "+";
color: #fff;
width: 40px;
height: 40px;
right: 0;
top: 0;
display: flex;
justify-content: center;
align-items: center;
cursor: grab;
background: linear-gradient(0deg, #473303 0%, #febf01 50%, #473303 100%);
/* background-size: auto; */
padding: 4px 8px;
-webkit-transition: 0.3s;
-ms-transition: 0.3s;
transition: 0.3s;
background-size: auto 200%;
}
.navbar-nav li.menu-item-has-children span.collased-icon:hover {
background-position: 100%;
}
.navbar-nav>li.menu-item-has-children:hover>.sub-menu li.menu-item-has-children:hover>.sub-menu {
opacity: 1;
-webkit-transform: none;
-ms-transform: none;
transform: none;
left: 0;
top: 0;
}
.navbar-nav>li.menu-item-has-children .sub-menu .sub-menu {
left: 0;
top: 0;
}
.navbar-nav>li.menu-item-has-children .sub-menu .sub-menu li a.nav-link {
padding: 11px 30px;
}
.navbar-nav>li.menu-item-has-children .sub-menu .sub-menu .sub-menu li a.nav-link {
padding: 11px 40px;
}
.navbar-nav li.menu-item-has-children span.collased-icon::before {
position: absolute;
content: "";
width: 12px;
height: 12px;
border: 2px solid #fff;
border-left: 0;
border-top: 0;
transform-origin: center;
transform: rotate(45deg);
transition: 0.3s;
top: 12px;
}
.navbar-nav li.menu-item-has-children span.collased-icon.expand::before {
transform: rotate(225deg);
top: 18px;
}
button.close-btn {
width: 100%;
height: 40px;
background: #e0a801;
border: 0;
right: 0;
position: absolute;
font-size: 18px;
color: #000;
padding: 0 15px;
z-index: 2;
text-align: left;
top: 0;
cursor: pointer;
text-transform: capitalize;
left: 0;
display: block;
line-height: 40px;
font-weight: 700;
}
button.close-btn span {
width: 30px;
height: 30px;
background: #443312;
float: right;
border-radius: 50%;
line-height: 1;
text-align: center;
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
margin: 5px 0;
}
button.close-btn span svg {
fill: #fbf9ec;
width: 18px;
height: 18px;
float: left;
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
}
@media screen and (max-width: 767px) {
header .container-fluid {
padding: 0 30px;
}
.navbar-brand svg {
width: 140px;
}
.navbar-nav>li>a.nav-link {
font-size: 16px;
color: #fbf9ec;
padding: 8px 15px;
text-align: left;
width: 100%;
min-height: 35px;
}
}
<meta name="viewport" content="width=device-width, initial-scale=1">
<<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
<header>
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="#">
<img src="https://i.postimg.cc/fbVfPpyv/logo.png" alt="logo">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-line"></span><span class="navbar-line"></span><span class="navbar-line"></span>
</button>
<div class="collapse navbar-collapse justify-content-end" id="navbarNav">
<button class="close-btn">Close <span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve">
<g>
<path d="M506.134,241.843c-0.006-0.006-0.011-0.013-0.018-0.019l-104.504-104c-7.829-7.791-20.492-7.762-28.285,0.068 c-7.792,7.829-7.762,20.492,0.067,28.284L443.558,236H20c-11.046,0-20,8.954-20,20c0,11.046,8.954,20,20,20h423.557 l-70.162,69.824c-7.829,7.792-7.859,20.455-0.067,28.284c7.793,7.831,20.457,7.858,28.285,0.068l104.504-104 c0.006-0.006,0.011-0.013,0.018-0.019C513.968,262.339,513.943,249.635,506.134,241.843z"></path>
</g>
</svg></span></button>
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link active" aria-current="page" href="#">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#">About Us</a></li>
<li class="nav-item menu-item-has-children"><a class="nav-link" href="#">Services</a>
<ul class="sub-menu">
<li class="nav-item"><a class="nav-link" href="#">Service 1</a></li>
<li class="nav-item menu-item-has-children"><a class="nav-link" href="#">Service 2</a>
<ul class="sub-menu">
<li class="nav-item"><a class="nav-link" href="#">Service 2.1</a></li>
<li class="nav-item menu-item-has-children"><a class="nav-link" href="#">Service 2.2</a>
<ul class="sub-menu">
<li class="nav-item"><a class="nav-link" href="#">Service 2.2.1</a></li>
<li class="nav-item"><a class="nav-link" href="#">Service 2.2.2</a></li>
<li class="nav-item"><a class="nav-link" href="#">Service 2.2.3</a></li>
<li class="nav-item"><a class="nav-link" href="#">Service 2.2.4</a></li>
</ul>
</li>
<li class="nav-item"><a class="nav-link" href="#">Service 2.3</a></li>
<li class="nav-item"><a class="nav-link" href="#">Service 2.4</a></li>
</ul>
</li>
<li class="nav-item"><a class="nav-link" href="#">Service 3</a></li>
<li class="nav-item"><a class="nav-link" href="#">Service 4</a></li>
<li class="nav-item"><a class="nav-link" href="#">Service 5</a></li>
<li class="nav-item"><a class="nav-link" href="#">Service 6</a></li>
</ul>
</li>
<li class="nav-item"><a class="nav-link" href="#">Blog</a></li>
<li class="nav-item"><a class="nav-link" href="#">Contact Us</a></li>
</ul>
</div>
</div>
</nav>
</header>