
I found this snippet code to create menu accordion from CodePen, but I did slightly modification from original code to suitable my client needs.
<!-- mobile menu -->
<div class="mobilenav--wrap">
<div class="mobilenav">
<?php
if(function_exists('wp_nav_menu')):
wp_nav_menu(
array(
'menu' =>'primary_nav',
'theme_location' => 'primary_nav',
'container'=>'',
'depth' => 2,
'menu_id' => 'menu' )
);
endif;
?>
</div>
</div>/* mobile menu container */
.mobilenav--wrap {
padding: 0;
width: 100%;
top: 0;
right: 0;
position: static;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
-ms-transition: all 0.3s ease;
-o-transition: all 0.3s ease;
transition: all 0.3s ease;
}
.mobilenav--wrap.show--mobilenav {
right: 0;
}
/* mobile menu */
.mobilenav {
width: 100%;
height: 100%;
overflow: scroll;
padding: 0;
}
.mobilenav > ul {
width: 100%;
box-sizing: border-box;
padding-inline-start:0;
}
.mobilenav ul li {
position: relative;
list-style:none;
font-size: 22px;
}
.mobilenav ul li a {
display: block;
padding: 15px 0px;
text-decoration: none;
color: color(3);
}
.mobilenav ul li a:hover {
color: color(1);
transition:all .6s ease;
}
.mobilenav ul li:hover ul {
display:block;
}
.mobilenav ul ul li {
border-bottom: 0;
position: relative;
font-size: 80%;
padding:0!important;
}
.mobilenav ul ul {
padding-left: 20px;
background:none;
padding:0 0 0 20px!important;
}
.mobilenav ul ul li a {
padding: 5px 0 5px 20px;
}
a.menu-expand {
padding: 0 !important;
background: transparent !important;
width: 44px;
height: 44px;
position: absolute;
top: 7px;
right: 0;
z-index: 100;
}
.mobilenav ul li.menu-item-has-children .plus1{
content: '';
position: absolute;
right: 10px;
top: 24px;
width: 20px;
height: 2px;
display: block;
background: color(1);
transition: all 0.3s ease-in-out;
transform: rotate(-180deg);
}
.mobilenav ul li.menu-item-has-children .plus2{
content: '';
position: absolute;
right: 10px;
top: 24px;
width: 20px;
height: 2px;
display: block;
background: color(1);
transition: all 0.3s ease-in-out;
transform: rotate(-270deg);
}
/*original*/
/*
.mobilenav ul li.menu-item-has-children > a.menu-expand.menu-clicked .plus1 {
transform: rotate(0);
}
.mobilenav ul li.menu-item-has-children > a.menu-expand.menu-clicked .plus2{
transform: rotate(0);
}
*/
.menu-clicked .plus2 {
transform: rotate(0)!important;
}//hide sub-menus
jQuery('.mobilenav ul ul').hide();
jQuery('.mobilenav ul.sub-menu').each(function() {
if(jQuery(this).children().length){
jQuery(this,'li:first').parent().append('<a class="menu-expand" href="#" style="font-size:26px;color:white;"><span class="plus1"></span><span class="plus2"></span></a>');
}
});
jQuery('.mobilenav ul li.menu-item-has-children').on('click',function(e){
if (jQuery(this).hasClass("menu-clicked")) {
jQuery(this).removeClass("menu-clicked");
jQuery(this).children('ul').slideUp(300, function(){});
} else {
jQuery(this).addClass("menu-clicked");
jQuery(this).children('ul').slideDown(300, function(){});
}
})
/*original*/
/*
jQuery('.mobilenav ul li.menu-item-has-children > a.menu-expand').on("click",function(e){
//enable these two lines if you only have one sub-menu level - closes other menus
jQuery (".menu-clicked").not(this).removeClass("menu-clicked");
jQuery('ul.sub-menu').slideUp(300, function(){});
e.preventDefault();
if (jQuery(this).hasClass("menu-clicked")) {
jQuery(this).removeClass("menu-clicked");
jQuery(this).prev('ul').slideUp(300, function(){});
} else {
jQuery(this).addClass("menu-clicked");
jQuery(this).prev('ul').slideDown(300, function(){});
}
});
*/

