Проблемы Aria со строкой меню навигации

  • Автор темы Віка1
  • 52
  • Обновлено
  • 17, May 2024
  • #1
У меня есть строка меню, но Судя по этой странице, похоже, у меня была неправильная функциональность. https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-1/menubar-1.html

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

как я могу это сделать с помощью приведенного выше кода.

Спасибо

 

<!DOCTYPE html>

<html lang="en">

<head>

<meta name="viewport" content="ширина = ширина устройства, начальный масштаб = 1">

<!--Author URL: [URL='https://lumtu.com/yti/Z5VV5ZGpodHRwczovL2NvZGVwZW4uaW8vYW5kb3JuYWd5L3Blbi9STmS9i']https://codepen.io/andornagy/pen/RNeydj[/URL]

Description: A Generic Hierarchical Menu Navigation

Version: 1-->

<style>

/* CSS Document */

body {

background: #212121;

font-size: 22px;

line-height: 32px;

color: #ffffff;

margin: 0;

padding: 0;

word-wrap: break-word !important;

font-family: 'Open Sans', sans-serif;

height: 100vh;

/*100% of the viewport*/

display: flex;

flex-direction: column;

}

main#content {

flex: 1;

overflow-y: scroll;

}

h1 {

font-size: 60px;

text-align: center;

color: #FFF;

}

h3 {

font-size: 30px;

line-height: 34px;

text-align: center;

color: #FFF;

}

h3 a {

color: #FFF;

}

ul {

list-style-type: none;

}

nav>ul {

display: flex;

}

nav>ul>li {

position: relative;

}

nav>ul>li>ul {

padding: 0;

top: 100%;

left: 0;

position: absolute;

}

input:checked~ul {

display: block;

}

button::after {

content: '\25bc';

}

li:focus-within>button::after {

content: '\25b2';

}

a {

color: #FFF;

}

h1 {

margin-top: 100px;

text-align: center;

font-size: 60px;

line-height: 70px;

font-family: 'Bree Serif', 'serif';

}

#container {

margin: 0 auto;

max-width: 890px;

}

p {

text-align: center;

}

/* Giving a background-color to the nav container. */

nav {

margin: 0;

padding: 0;

background-color: #E64A19;

}

#logo {

display: block;

padding: 0 30px;

float: left;

font-size: 20px;

line-height: 60px;

}

/* Since we'll have the "ul li" "float:left"

* we need to add a clear after the container. */

nav:after {

content: "";

display: table;

clear: both;

}

/* Removing padding, margin and "list-style" from the "ul",

* and adding "position:reltive" */

nav ul {

float: right;

padding: 0;

margin: 0;

list-style: none;

position: relative;

}

/* Positioning the navigation items inline */

nav ul li {

margin: 0px;

display: inline-block;

float: left;

}

nav button {

border: none;

height: 100%;

}

/* Styling the links */

nav a,

nav button {

display: block;

padding: 14px 20px;

color: #FFF;

font-size: 17px;

text-decoration: none;

background-color: #E64A19;

}

nav ul li ul li:hover {

background: #000000;

}

/* Background color change on Hover */

nav a:hover,

nav button:hover {

background-color: #000000;

text-decoration: underline;

}

input#drop {

display: none;

}

/* Hide Dropdowns by Default

* and giving it a position of absolute */

nav ul ul {

display: none;

position: absolute;

/* has to be the same number as the "line-height" of "nav a" */

top: 60px;

}

/* Display Dropdowns on focus */

nav ul li:focus>ul {

display: inherit;

}

/* Fisrt Tier Dropdown */

nav ul ul li {

width: 170px;

float: none;

display: list-item;

position: relative;

}

/* Second, Third and more Tiers

* We move the 2nd and 3rd etc tier dropdowns to the left

* by the amount of the width of the first tier.

*/

nav ul ul ul li {

position: relative;

top: -60px;

/* has to be the same number as the "width" of "nav ul ul li" */

left: 170px;

}

/* Making dropdowns tabbable */

li ul {

display: none;

}

li:focus-within ul {

display: block;

}

/* hamburger icon */

label.hamburger {

position: relative;

display: none;

height: 50px;

width: 75px;

}

.line {

position: absolute;

left: 10px;

height: 4px;

width: 55px;

background: #fff;

border-radius: 2px;

display: block;

transition: 0.5s;

transform-origin: center;

}

.line:nth-child(1) {

top: 12px;

}

.line:nth-child(2) {

top: 24px;

}

.line:nth-child(3) {

top: 36px;

}

input#drop:checked~label.hamburger .line:nth-child(1) {

transform: translateY(12px) rotate(-45deg);

}

input#drop:checked+label.hamburger .line:nth-child(2) {

opacity: 0;

}

input#drop:checked+label.hamburger .line:nth-child(3) {

transform: translateY(-12px) rotate(45deg);

}

/* Media Queries

--------------------------------------------- */

@media all and (max-width : 768px) {

#logo {

display: block;

padding: 0;

width: 100%;

text-align: center;

float: none;

}

nav>ul {

display: none;

}

nav>ul>li>ul {

position: static;

}

/* Styling the toggle lable */

.toggle {

display: block;

height: 50px;

background-color: #E64A19;

/* padding: 14px 20px; */

color: #FFF;

font-size: 17px;

text-decoration: none;

border: none;

}

/* Display Dropdown when clicked on Parent Lable */

input#drop:checked~ul {

display: flex;

flex-direction: column;

}

nav ul {

float: none;

}

nav ul ul {

margin-left: 1em;

}

label.hamburger {

display: block;

}

}

@media all and (max-width : 330px) {

nav ul li {

display: none;

width: 94%;

}

}

</style>

<title>Menu Navigation Test</title>

</head>

<body>

<header>

<nav>

<div role="tablist" aria-label="Menu" id="logo">Syracuse University Libraries</div>

<input type="checkbox" id="drop" />

<label for="drop" class="hamburger" tabindex="1">

<span class="line"></span>

<span class="line"></span>

<span class="line"></span>

</label>

<ul class="menu">

<li><a href="">Home</a></li>

<li>

<!-- First Drop Down -->

<button role="tab" aria-selected="true" aria-controls="about-tab" id="about">About</button>

<ul>

<div tabindex="0" role="tabpanel" id="about-tab" aria-labelledby="about"> <li><a href="#">Departments</a></li> </div>

<div tabindex="0" role="tabpanel" id="about-tab" aria-labelledby="about"> <li><a href="#">News</a></li> </div>

</ul>

</li>

<li>

<!-- First Drop Down -->

<button role="tab" aria-selected="false" aria-controls="rooms-tab" id="rooms">Rooms</button>

<ul>

<div tabindex="0" role="tabpanel" id="rooms-tab" aria-labelledby="rooms"> <li><a href="#">Resources</a></li></div>

<div tabindex="0" role="tabpanel" id="rooms-tab" aria-labelledby="rooms"> <li><a href="#">Links</a></li></div>

</ul>

</li>

<li><a href="">Special Collections</a></li>

<li><a href="">Giving</a></li>

<li><a href="">More</a></li>

</ul>

</nav>

</header>

<!-- Sample Text -->

<main class="scroll" id="content">

<h1>

<p>This is a Generic Hierarchical Menu Navigation.</p>

</h1>

<p>This is a sticky Hierarchical Menu Navigation. It contains a dropdown functionality when clicked on. <br>When tabbing through it the dropdown menu opens on focus. <br>When minimized it turns in to a animated hamburger menu.</p>

</main>

<nav>

<footer>

Copyright © 2020 Syracuse University Libraries

</footer>

</nav>

<!-- Core Javascript Bottom -->

<script src="/assets/plugins/jquery-1.12.3.min.js" type="text/javascript"></script>

<script src="/assets/plugins/back-to-top.js" type="text/javascript"></script>

</body>

</html>

Код (разметка):

Віка1


Рег
29 Nov, 2012

Тем
2

Постов
3

Баллов
23
  • 18, May 2024
  • #2
Примечание. Я использую старые версии IE CC, чтобы не отправлять макет экрана или сценарии мультимедиа в IE9/более ранние версии. Мы собираемся использовать множество техник — flex, Grid, :focus-within — от которых устаревший IE просто захлебывается. Я буду размещать живые копии здесь:
https://cutcodedown.com/for_others/soupi/

Эта окончательная разметка +/- несколько незначительных исправлений, которые могут возникнуть во время стилизации: семантически передает контент. Без CSS
https://cutcodedown.com/for_others/soupi/menu.base.html

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

Этот базовый уровень должен быть целью вашего HTML, а не вашего HTML, который в основном возится с внешним видом.

Вот где более 90% мировых разработчиков ошибаются на фронте доступности и почему появился такой идиотский мусор, как Ария; общее отсутствие надлежащего доступного HTML. Дайте мне несколько, чтобы собрать немного CSS, чтобы все это работало, а также любые необходимые сценарии.

Больше никаких изменений в разметке быть не должно, потому что мой опыт позволяет мне добавлять DIV и SPAN преждевременно, но на практике в большинстве случаев семантически нейтральные теги (DIV, SPAN) не добавляются до тех пор, пока не будет написан CSS.
 

Андрей Власов1


Рег
29 Apr, 2011

Тем
0

Постов
3

Баллов
3
  • 03, Jun 2024
  • #3
Вот это реализовано с помощью CSS:
https://cutcodedown.com/for_others/soupi/menu.html

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

Предполагается, что стрелки в браузере предназначены для ПРОКРУТКИ страницы, и переопределение этого поведения является одновременно нарушением доступности и нарушением UX. Однако обычная вкладка поможет вам пройти через меню.

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

Возвращается к IE 10 благодаря небольшой поддержке сценариев.

Вместо анализа браузера я использовал обнаружение возможностей.

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

Artem Nikulochkin


Рег
09 Oct, 2012

Тем
1

Постов
2

Баллов
12
  • 06, Jun 2024
  • #4
Опять же, учитывая, что ваша разметка сломана и мало похожа на их разметку, это, вероятно, способствует этому. Если у вас есть недействительная бессмысленная разметка, которая не соответствует рассматриваемым примерам, это, конечно, не работает.
 

sborbaz


Рег
31 Jul, 2014

Тем
1

Постов
3

Баллов
13
  • 08, Jun 2024
  • #5
О чем ты вообще говоришь? Роли Aria не имеют ничего общего с навигацией с помощью клавиатуры, поскольку более 99% визуальных UA их игнорируют.

На самом деле, это бессмысленное раздувание кода, потому что ЕДИНСТВЕННАЯ причина, по которой они существуют, заключается в том, что в каком-то странном случае вы используете несемантическую разметку и пытаетесь исправить значение неправильных тегов.

В этом случае просто не используйте неправильную разметку.



Что-то усугубленное использованием JavaScript там, где он вам не нужен, умственно ослабленной КАТАСТРОФОЙ некомпетентности разработчика, известной как jQuery, классами впустую, дерзким тегом NAV, который вам не понадобится, если вы просто правильно используете нумерованные заголовки, DIV внутри LI выполняет работу H1 перед UL, DIV обертывает LI и P внутри H1, где это полная тарабарщина / недопустимая разметка, сказал, что H1 с P внутри семантически должен быть H2, возится с индексом табуляции, создавая ваш подпрограмму - элементы меню не могут быть сфокусированы на средствах чтения с экрана/чтении Брайля.



и т. д., и т. д., и т. п. Бессмысленная семантика + раздувание арий + плохие методы разработки.

неудивительно, что на 355 байтах открытого текста тратится 2,5 КБ разметки и 6 КБ CSS; даже не 1,7 тыс.

HTML и, возможно, 4 тыс.

CSS для того, что он сейчас делает. Я думаю, вам нужно немного вернуться назад и изучить семантическую разметку и основные структурные правила HTML, прежде чем вы начнете погружаться в сценарии и ARIA.

Возможно, это звучит грубо, но я вижу здесь именно это.

Когда вы помещаете DIV вокруг LI в качестве дочернего элемента UL и P внутри нумерованных заголовков и не используете нумерованные заголовки должным образом, вы не готовы играть с ARIA, JavaScript или даже CSS.

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

Также не следует использовать «авторское право». Используйте символ ИЛИ слово, а не то и другое. Ошибка, которую я вижу постоянно.. Хотя я подозреваю, что ваша НАСТОЯЩАЯ проблема в том, что вы не включили JavaScript, который на самом деле заставляет работать любую клавиатуру, что на самом деле не должно иметь ничего общего с ролями aria... и тем, как он реализован на них. страниц можно считать нарушением WCAG. Но, как я уже говорил в нескольких местах, вся эта штука с ARIA и все, что они пытаются с ее помощью сделать, пахнет людьми, работающими над ней - очень похоже на хороший кусок HTML 5 - недостаточно знающими о доступности или удобстве использования.

быть вовлеченным во многое из чего-либо.

Я не уверен, что доверил бы этим клоунам завязывать себе шнурки на ботинках.
Вы не включаете это:
https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-1/js/MenubarItemLinks.js

https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-1/js/MenubarLinks.js

https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-1/js/PopupMenuItemLinks.js

https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-1/js/PopupMenuLinks.js

Следовательно, вы не получаете «улучшение» сценария. (это понижение версии, поскольку оно нарушает традиционные элементы управления браузером, что опять же является возможным нарушением WCAG и, безусловно, нарушением многих договорных требований, встречающихся в банковском деле, коммунальных услугах, здравоохранении и т. п.)
 

demount


Рег
07 Dec, 2011

Тем
0

Постов
3

Баллов
3
Тем
49554
Комментарии
57426
Опыт
552966

Интересно