Видимость меню и взлом MS Edge для меню с вкладками - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть меню навигации css, которое использует фокусировку внутри, чтобы позволить вкладку через Главную навигацию для доступа к гандикапу. Edge не поддерживает фокусировку внутри и не позволяет вставлять скрытые элементы. Я надеюсь использовать jquery, чтобы изменить вложенную видимость ul при переходе по ссылкам навигации. Я не могу понять, как изменить ul обратно на скрытый, когда фокус вкладки перемещается из содержимого этого конкретного ul. Таким образом, вкладка к чему-то со скрытым ul, UL становится видимой, позволяя вкладывать его содержимое. Затем, после прокрутки всего содержимого UL, фокус вкладки перемещается из ul к следующей ссылке, и UL снова становится скрытым и повторяется для всех UL внутри nav. Я не знаю много jQuery просто казалось правильным путем к go, пока край не поддерживает фокусировку внутри. Скрипка ниже, спасибо за любую помощь, пока я продолжаю пытаться найти решение.

TLDR; знаете ли вы синтаксис jquery, чтобы изменить ul на visibilty: скрытый, когда кто-то .focusout элемента .last отдельного ul? Мы не хотим скрывать ul, когда фокус покинул ul, если только он не был последним элементом в списке.

jQuery(document).ready(function(){
  jQuery('#main  a').focus(function(){
      jQuery(this).next("ul").css('visibility','visible')

  });

});

https://jsfiddle.net/joeyjosay/0jxqut74/7/

ЭТО ЭТО РЕШЕНИЕ, которое Я НАШЕЛ

jQuery(document).ready(function(){
  jQuery('#main  a').focus(function(){
      jQuery(this).next("ul").css('visibility','visible')

  });
  jQuery('li ul li:last-child').focusout(function(){
      jQuery(this).parent('ul').css('visibility','hidden')

  });
});

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Я надеюсь использовать jquery, чтобы изменить вложенную видимость ul при переходе по ссылкам навигации

Это не способ сделать меню доступным. Проблема заключается в том, что если бы в вашем меню было 15 выпадающих пунктов, пользователь был бы вынужден пролистать их все, чтобы перейти к следующему пункту меню «верхнего уровня».

Кроме того, как люди получают к ним доступ пункты меню на планшете в альбомной ориентации? Поскольку вы не можете использовать :hover, я думаю, вы не можете получить доступ к своим подменю. (в настоящее время многие планшеты имеют 1920 * 1080 или выше, поэтому вы не можете положиться на width CSS в своем CSS).

Попробуйте использовать приведенную ниже скрипку (где я добавил еще несколько пунктов меню в ваш пример) и выберите «основной 2» - для иллюстрации разочарования автоматом необходимо всего 19 остановок табуляции c причина .

jQuery(document).ready(function(){
  jQuery('#main  a').focus(function(){
      jQuery(this).next("ul").css('visibility','visible')
  
  });
  
});
#main>ul li a{
  display:inline-block;  
  float:left;
}
#main li > ul {
  visibility: hidden;
  
}
#main li:hover > ul{
  visibility: visible;
  
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="main">
  <li>
    <a href="#">main 1</a>
      <ul>
        <li>
          <a href="#">sub 1</a>
            <ul>
              <li>
                <a href="#">dubsub1</a>
              </li>
              <li>
                <a href="#">dubsub2</a>
              </li>
              <li>
                <a href="#">dubsub3</a>
              </li>
              <li>
                <a href="#">dubsub4</a>
              </li>
              <li>
                <a href="#">dubsub5</a>
              </li>
              <li>
                <a href="#">dubsub6</a>
              </li>
              <li>
                <a href="#">dubsub7</a>
              </li>
              <li>
                <a href="#">dubsub8</a>
              </li>
              <li>
                <a href="#">dubsub9</a>
              </li>
              <li>
                <a href="#">dubsub10</a>
              </li>
              <li>
                <a href="#">dubsub11</a>
              </li>
              <li>
                <a href="#">dubsub12</a>
              </li>
              <li>
                <a href="#">dubsub13</a>
              </li>
               <li>
                <a href="#">dubsub14</a>
              </li>
              <li>
                <a href="#">dubsub15</a>
              </li>
            </ul>
          </li>
        <li>
          <a href="#">sub 2</a>
        </li>
      </ul>

  </li>
  <li>
    <a href="#">main 2</a>
      <ul>
        <li>
          <a href="#">sub 1.1</a>
          <ul>
              <li>
                <a href="#">dubsub2</a></li>
            </ul>
          
          </li>
        <li>
          <a href="#">sub 2.1</a>
        </li>
      </ul>
  </li>
  <li>
    <a href="#">main 3</a>
  </li>
</ul>

Что делать вместо этого?

Вместо этого вы должны предоставить в меню пункт clickable , чтобы показать раскрывающийся список для пользователей клавиатуры.

Есть несколько способов сделать это. Один из вариантов - заставить пункт меню верхнего уровня для каждого подменю открывать подменю, а не переходить на главную страницу.

Если вы не можете это поддерживать из-за архитектуры сайта, добавьте стрелку вниз к пункту меню верхнего уровня, который при нажатии открывает раскрывающееся меню.

Отличный пример для начала работы доступен на W3 C - он показывает, как добавить отдельную стрелку выпадающего меню, которая фокусируется и переключает подменю для пользователей клавиатуры, но также показывает раскрывающееся меню на :hover, поэтому оно предоставляет пользователям мыши ту же функциональность, что и раньше.

Единственное, что я хотел бы добавить к примеру, это по возможности сделать раскрывающуюся цель 44px на 44px. минимум, чтобы он также соответствовал минимальным размерам сенсорных целей в соответствии с WCAG. - хотя это трудно, если вы не рассчитывали на это, просто делайте, что можете!

В зависимости от того, как вы В результате получается, что вместо 19 табуляций вы достигнете «основного 2», вместо этого у вас будет только 3 табуляции -> «основной 1» -> выпадающий «основной 1» -> «основной 2».

И наконец, focus-within - это замечательно, и у всех, но только у 84% охвата браузера - посмотрите ответ, который я дал о фокусировке в пределах , для другого способа достижения определенных вещей в CSS используя оператор +, который может быть полезен для вас, поскольку он охватывает аналогичные теории о том, как работать с aria-expanded и использовать его в CSS.

0 голосов
/ 20 февраля 2020

Этот код смог идентифицировать последний элемент в каждом списке, и когда он потерял фокус, видимость его родительского ul была возвращена к скрытой. Хороший взлом на данный момент, но, как и в других ответах, было бы неплохо использовать другую сборку навигации.

jQuery(document).ready(function(){
  jQuery('#main  a').focus(function(){
      jQuery(this).next("ul").css('visibility','visible')

  });
  jQuery('li ul li:last-child').focusout(function(){
      jQuery(this).parent('ul').css('visibility','hidden')

  });
});
...