При переходе в боковое меню в мобильной версии возникает проблема, когда я нажимаю закрыть

#javascript #html #css #wordpress #divi

Вопрос:

На веб-сайте ниже, когда я закрываю боковое меню в мобильном телефоне, я вижу, что текст меню закрывается быстрее, чем текст и значок поиска. Почему это произошло? Почему они не сближаются? Я использовал плагин Divi на WordPress, но я думаю, что здесь нет никакого конфликта. Он плавно и хорошо открывается и закрывается на рабочем столе.

https://wordpress-602494-1949747.cloudwaysapps.com/

 <script>
 let isMenuOpen = false;  
 const menuHandler = document.querySelector('.menu_left_handler');
 const menuTitle = document.querySelector('.menu_left_title');
 const menuRight = document.querySelector('.menu_right');
 menuHandler.addEventListener('click', () => {
    isMenuOpen ? menuRight.classList.remove('menu_right__open') : menuRight.classList.add('menu_right__open');
    isMenuOpen = !isMenuOpen;
    menuHandler.innerText === '☰' ? (menuHandler.innerText = '✕') : (menuHandler.innerText = '☰');
    menuTitle.innerText === 'MENY' ? (menuTitle.innerText = 'STÄNG') : (menuTitle.innerText = 'MENY');
 });

let x = window.matchMedia("(max-width: 768px)")
  function mediaQ(x) {
    if (x.matches) {
      menuHandler.addEventListener('click', () => {
        let mobileMenu = document.getElementById("menuId")
        mobileMenu.classList.toggle("menu_right__open");
         });    
    }
  } 
     #menuId {
       background: #171717;
       border-radius: 0 1rem 1rem 0;
       padding: 1rem;
       display: inline-flex;
       flex-direction: row;
       flex-wrap: nowrap;
       justify-content: flex-start;
       align-items: flex-start;
       align-content: stretch;
       color: #fff;
          font-family: 'museo-sans', sans-serif !important;
      height: 30rem;
              
    }
  .menu {
    height: 25rem;
  }

    #menu a {
       color: #fff;
    }

    .menu_right {
       max-width: 0;
       overflow: hidden;
      transition: max-width 0.3s;
    }

    .menu_right__open {
       max-width: 100rem !important;
      height: 25rem;
      transition: max-width 2s;
    }

    .menu_right ul {
       list-style: none;
       width: 20rem;
       padding-top: 5rem;
       padding-left: 2rem;
        line-height: 35px;
    }

    .menu_right ul a {
       display: block;
       text-decoration: none;
       margin: 1rem 0;
       font-size: 20px;
    }
   
   .menu_right ul a:hover {
        color: #F7B660 ;
   }

    .menu_left {
       display: flex;
       flex-direction: column;
       flex-wrap: nowrap;
       justify-content: flex-start;
       align-items: center;
       align-content: center;
       font-size: 20px;
    }

    .menu_left_title {
        font-family: 'museo-sans', sans-serif !important;
        font-size: 20px;
       writing-mode: tb-rl;
       transform: rotate(-180deg);
       margin-top: 1rem;
       padding: 0.3rem;
    }

    .menu_left_handler {
       padding: 0.5rem;
       cursor: pointer;
      font-size: 35px;
    }
   
   @media screen and (max-width: 768px) {
     #menuId {
       height: 5rem;
     }
     .menu {
        height: 5rem;
     }
     .menu_left_title {
       display: none;
     }
     .menu_right__open {
       height: 26rem !important;
       overflow-y: none !important;
       border-radius: 2px;
       transition: max-width 4s;
     }
     .menu_right {
       transition: max-width 0.3s;
     }
     .menu_right ul a {
     }
      .menu_left_handler {
       padding: 0.5rem;
       cursor: pointer;
      font-size: 18px;
    }

} 
 <body>

 <div id="menuId" class="menu">
    <div class="menu_left">
       <div class="menu_left_handler">☰</div>
       <div class="menu_left_title">MENY</div> 
    </div>
    <div class="menu_right">
      <div class="et_pb_with_border et_pb_module et_pb_search et_pb_search_0_tb_header  et_pb_text_align_left et_pb_bg_layout_light et_pb_hide_search_button">
              
              
              <form role="search" method="get" class="et_pb_searchform" action="https://wordpress-602494-1949747.cloudwaysapps.com/">
                  <div>
                      <label class="screen-reader-text" for="s">Search for:</label>
                      <input type="text" name="s" placeholder="" class="et_pb_s">
                      <input type="hidden" name="et_pb_searchform_submit" value="et_search_proccess">
                      
                      <input type="hidden" name="et_pb_include_posts" value="yes">
                      <input type="hidden" name="et_pb_include_pages" value="yes">
                      <input type="submit" value="Search" class="et_pb_searchsubmit" style="">
                  </div>
              </form>
          </div>
       <nav>
          <ul><strong>
             <li><a href="/index.php/robotlosningar">Robotlösningar</a></li>
             <li><a href="/index.php/made-by-andon">Made by Andon</a></li>
             <li><a href="/index.php/eftermarknad">Eftermarknad</a></li>
             <li><a href="/index.php/kontakt">Kontakt</a></li>
             <li><a href="/index.php/om-andon-robotics">Om Andon Robotics</a></li>
            </strong>
          </ul>
       </nav>        
    </div>
 </div>
</body> 

Ответ №1:

Это произойдет потому, что вы не меняете высоту, когда закрываете div, что приводит к его закрытию, так как вы просто меняете максимальную ширину, это приведет к проблеме ширины, с которой вы сталкиваетесь.

Во-первых, я бы добавил ваш переход в ваш div с идентификатором MenuId, а не с фактическим классом, который вы добавляете при нажатии. Поиграйте с ним, но вам нужно изменить высоту, а также ширину, иначе высота просто сломается. Может быть, подумайте о том, чтобы делать свои переходы примерно так. Пример, который я вам даю, не является 100% исправлением, но он укажет вам направление, в котором вам нужно идти, чтобы понять вашу проблему

 transition:max-width 0.4s, height 0.4s;
 

Комментарии:

1. Я не мог понять, что ты сказал. Я проверяю высоту, но ничего не произошло

Ответ №2:

как указано ниже @Stevo, в этом в основном и заключается проблема. Однако, если вы намерены анимировать все меню в целом, поскольку оно плавно и последовательно расширяется из одной исходной точки, я бы посоветовал вам либо использовать transform:scale(); для анимации его роста, либо перевести всю панель из левого верхнего угла в правый нижний, чтобы содержимое исчезало по мере его появления в окне просмотра.

Проблема с этим:

 transition:max-width 0.4s, height 0.4s;
 

Заключается в том, что вы указываете только время или анимацию для запуска, но ваша ширина и высота отличаются. Поэтому он не будет последовательно расширяться.

Кроме того, не пытайтесь заставить его расширяться синхронно, редактируя значения времени, потому что это 1) ужасный подход, и 2) все работает нормально, пока вы не добавите что-то в меню и высота не изменится.