如何使用 javascript 将最大高度转换添加到移动端菜单?

问题描述 投票:0回答:0

我正在尝试为我的响应式网站制作一个移动端菜单。正如我注意到的那样,我不能直接使用过渡到自动高度。我写了 css , html 和 js 可以工作但没有过渡: 这是代码:

const main_ul=document.querySelector('.main-mobile-menue-ul');
main_ul.addEventListener('mouseup',function(e){
    if(e.target.className==="main-m-a-sub"){
        const parent=e.target.parentElement.children[1];
        parent.classList.toggle('show-sub-menue');
}})
const closeButtom=document.getElementById('close-menue');
const mobile_nav=document.getElementById('main-mobile-menue')
closeButtom.addEventListener('click',function(){
    mobile_nav.classList.remove('open-menue-btn')
})
const open_menue=document.getElementById('mobile-menue');
open_menue.addEventListener('click',function(){
    mobile_nav.classList.add('open-menue-btn')
})
header{
    position: relative;
}
#main-mobile-menue{
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    background-color: #fff;
    position: fixed;
    z-index: 100;
    transform: translateX(-100%);
    transition: transform 0.5s;
}
#main-mobile-menue .mobile-header-menue{
    display: flex;
    justify-content: space-between;
    align-items: center;
    box-shadow:  2px 2px 8px 2px #f0eded;
    padding: 20px 15px;
}
#close-menue{
    border: none;
    background-color: transparent;
    font-size: 30px;
    color: #556370;
}
.main-mobile-menue-container{
    padding: 5px 0px;
}
.main-mobile-menue-container .main-mobile-menue-ul {
    padding-left: 0px !important;
    list-style:none;
}
.main-mobile-menue-container .main-mobile-menue-ul .main-m-li a{
    text-decoration: none;
    display: flex;
    justify-content: space-between;
    padding: 11px 24px;
    font-size: 18px;
    color: #556370;
}
.main-mobile-menue-container .main-mobile-menue-ul .main-m-li {
    border-bottom: 1px solid #ddddddd7;
}
 .main-m-li-sub .sub-m-ul{
    list-style: none;
    background-color: #f7f7f7;
    padding-left: 24px !important;
    opacity: 0;
    visibility: hidden;
    display: none;
    transition: all 2s ease-out  !important; 
}
.sub-m-li-link,.main-m-a-sub-sub{
    font-size:16px !important;
}
.sub-m-li-sub .main-m-a-sub-sub{
    justify-content: start !important;
    align-items: center;
}
.sub-m-li-sub .main-m-a-sub-sub .sub-sub-menue-m{
    margin-left: 10px;
}

.show-sub-menue{
    visibility: visible !important;
    display: block !important;
    opacity: 1 !important;
}
.close-menue-btn{
    transform: translateX(-100%);
}
.open-menue-btn{
    transform: translateX(0%) !important;
}
<header>
<nav id="main-mobile-menue" >
    <div class="mobile-header-menue">
        <img src="file:///C:/Users/farda/Desktop/new%20website/website/img/logo-desktop.png" width="200px">
        <button id="close-menue" ><i class="fa-solid fa-xmark close-menue"></i></button>
    </div>
    <div class="main-mobile-menue-container" >
        <ul class="main-mobile-menue-ul" >
            <li class="main-m-li"><a href="#">Home</a></li>
            <li class="main-m-li main-m-li-sub"><a href="#" class="main-m-a-sub">Services <i class="fa-solid fa-chevron-right"></i></a>
                <ul class="sub-m-ul " >
                    <li class="sub-m-li"><a class="sub-m-li-link" href="#">programming</a></li>
                    <li class="sub-m-li sub-m-li-sub"><a class="main-m-a-sub" href="#">Codding <i class="fa-solid fa-chevron-right sub-sub-menue-m"></i></a>
                        <ul class=" sub-m-ul  " >
                            <li class="sub-m-li"><a class="sub-m-li-link" href="#">programming2</a></li>
                            <li class="sub-m-li"><a class="sub-m-li-link" href="#">programming3</a></li>
                        </ul>
                    </li>
                    <li class="sub-m-li"><a  class="sub-m-li-link" href="#">Designing</a></li>
                </ul>
            </li>
            <li class="main-m-li main-m-li-sub"><a class="main-m-a-sub" href="#">Services <i class="fa-solid fa-chevron-right"></i></a>
                <ul class="sub-m-ul ">
                    <li class="sub-m-li"><a class="sub-m-li-link" href="#">programming</a></li>
                    <li class="sub-m-li sub-m-li-sub"><a class="main-m-a-sub" href="#">Codding <i class="fa-solid fa-chevron-right sub-sub-menue-m"></i></a>
                        <ul class="sub-m-ul " >
                            <li class="sub-m-li"><a class="sub-m-li-link" href="#">programming2</a></li>
                            <li class="sub-m-li"><a class="sub-m-li-link" href="#">programming3</a></li>
                        </ul>
                    </li>
                    <li class="sub-m-li"><a  class="sub-m-li-link" href="#">Designing</a></li>
                </ul>
            </li>
        </ul>
    </div>
</nav>
</header>

但我不知道如何将 Javascript scrollHeight 用于所有子菜单,我只能计算一个子菜单的高度,以及单击打开时前一个子菜单中的其他子菜单的高度,将被隐藏或没有完全显示!

有人可以帮我使用 javascript scrollHeight 让这个菜单的所有部分在打开菜单和子菜单时自动调整高度和过渡吗?

javascript html css height side-menu
© www.soinside.com 2019 - 2024. All rights reserved.