Статьи

Доступность, часть 3: ARIA

В предыдущей статье этой серии мы рассмотрели первый принцип доступности: обеспечение доступности контента в формате, который может быть легко воспринят пользователем. Если пользователь использует вспомогательные технологии, один из способов сделать это состоит в том, чтобы облегчить этим технологиям анализ и понимание вашего сайта и его контента. В этой статье мы сосредоточимся на одном конкретном способе сделать это: ARIA.

WAI-ARIA (Инициатива веб-доступности — Accessible Rich Internet Applications), или ARIA, — это протокол W3C, который улучшает взаимодействие вашего сайта со вспомогательными технологиями. Это делается несколькими способами:

  • Предоставляет способ объявления структуры страницы (например, обозначение цели или роли раздела страницы — навигации, поиска, основного содержимого и т. Д.).
  • Улучшает доступ к интерактивным элементам управления (таким как древовидные меню, перетаскивание, ползунки, элементы управления сортировкой и т. Д.), Объявляя их «состояние» (например, включено / отключено, скрыто, обязательные поля).
  • Предоставляет способ объявления областей, в которых контент может обновляться динамически (так называемые оперативные области ), так что обновления могут быть доведены до сведения пользователя.

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

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

Если структуру страницы можно определить программным способом и определить каждый «регион» веб-страницы (например, навигацию сайта, основное содержимое, боковую панель и т. Д.), То вспомогательные технологии могут лучше представить эту структуру Пользователь. Например, ссылки «перейти к содержанию» (о которых мы расскажем в следующей статье) могут устареть, если программа чтения с экрана знает, где находится основной контент. HTML, однако, не позволяет определить цель региона на странице. Это где роли ARIA вступают.

Снимок экрана темы TwentyThirteen с достопримечательностями ARIA. Основные элементы: навигация по баннеру и выделенная информация.

Роль ARIA — это просто значение атрибута, которое определяет назначение элемента. Самым простым примером будет форма поиска:

1
2
3
<form role=»search»>
    …
</form>

Роль «поиск» идентифицирует эту <form> как форму для поиска контента сайта и средство чтения с экрана, способное распознавать, которое знает, куда направить пользователя, если он хочет искать контент. Например, некоторые программы чтения с экрана предоставляют клавиши быстрого доступа для перехода к форме поиска. Точно так же, понимание структуры страницы позволяет вспомогательным технологиям создавать осмысленное «дерево» страницы. Например, программа чтения с экрана JAWS использует ключ с запятой для перехода между этими ролями, что позволяет пользователю быстро переключаться между регионами сайта (его заголовком, навигацией, основным контентом и т. Д.).

Этот тип атрибута называется « Роль ориентира документа» , и среди доступных значений:

Контент, связанный с сайтом, например, название сайта и / или логотип компании. В большинстве тем эта информация находится в header.php и помечает элемент, который оборачивает заголовок сайта, описание и логотип с этой ролью:

01
02
03
04
05
06
07
08
09
10
11
12
13
<div id=»branding» role=»banner»>
 
    <p class=»site-title»>
        <a href=»<?php echo esc_url( home_url( ‘/’ ) );?>»>
            <?php echo get_bloginfo(‘name’);
        </a>
    </p>
     
    <p class=»site-description»>
        <?php echo get_bloginfo( ‘description’ );?>
    </p>
     
</div>

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

1
2
3
4
5
6
7
<nav role=»navigation»>
 
    <?php wp_nav_menu( array(
        ‘theme_location’ => ‘primary’
    ) );
     
</nav>

В соответствии со спецификациями HTML5, role="navigation" должно подразумеваться при использовании <nav> и поэтому не требуется. Тем не менее, нет ничего плохого в том, чтобы быть явным.

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

  • index.php
  • single.php
  • page.php

Ваш «основной цикл», например, может выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
<div id=»main» class=»hfeed» role=»main»>
 
    <?php if ( have_posts() ) : ?>
     
        <?php while ( have_posts() ) : the_post();
         
            //The loop content
             
        <?php endwhile;
             
    <?php endif;
     
</div>

и ваши шаблоны страниц могут выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<div id=»main» role=»main»>
 
    <div id=»post-<?php the_ID(); ?>» <?php post_class();
     
        <h1 class=»entry-title»> <?php the_title();
         
        <div class=»entry-content»>
             
            <?php the_content();
        </div>
     
    </div>
     
</div>

Это идентифицирует поисковую форму (ы) на вашем сайте и может использоваться более одного раза. Большинство тем не «жестко кодируют» форму поиска в своей теме, а вместо этого полагаются на области виджетов, где пользователь может добавить виджет поиска. В этом случае (и при условии, что вы используете WP 3.6 или выше) вам не нужно ничего делать: поисковая форма WordPress по умолчанию уже добавляет роль поиска соответствующим образом. Кроме того, он обрабатывает метки форм и кнопку отправки в доступной форме.

Если вы жестко get_search_form() форму поиска в своей теме, обязательно используйте get_search_form() (см. Codex ). Наконец, если вам требуется, чтобы ваша тема изменила форму поиска по умолчанию, вы можете создать файл шаблона с именем searchform.php но обязательно добавьте роль поиска. Шаблон формы поиска по умолчанию:

01
02
03
04
05
06
07
08
09
10
<form role=»search» method=»get» class=»search-form» action=»<?php echo home_url( ‘/’ ); ?>»>
 
    <label>
        <span class=»screen-reader-text»><?php echo _x( ‘Search for:’, ‘label’ );
        <input type=»search» class=»search-field» placeholder=»Search &hellip;»
    </label>
 
    <input type=»submit» class=»search-submit» value=»<?php echo esc_attr_x( ‘Search’, ‘submit button’ ); ?>» />
 
</form>

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

1
2
3
4
5
6
7
8
9
<?php while ( have_posts() ) : the_post();
 
    <article id=»post-<?php the_ID(); ?>» <?php post_class();?> role=»article»>
     
        //Post title / excerpt…
         
    </article>
     
<?php endwhile;

Это идентифицирует регион, который был описан как «поддерживающий контент для основного контента». В контексте WordPress это может означать любые боковые панели. sidebar.php ваш шаблон sidebar.php может выглядеть примерно так:

1
2
3
4
5
6
7
8
9
<div class=»sidebar» role=»complementary»>
     
    <?php if ( is_active_sidebar( ‘right-sidebar’ ) ){
     
        dynamic_sidebar( ‘right-sidebar’ );
         
    } ?>
     
</div>

Это обычно используется для идентификации нижнего колонтитула. Официально это описано как:

Большой воспринимаемый регион, который содержит информацию о родительском документе.

Например, он может включать сноски, авторские права, ссылки на заявления о конфиденциальности и т. Д. Однако он обычно используется для обозначения нижнего колонтитула страницы, независимо от ее содержимого. Firefox, Safari и Chrome автоматически назначают роль <footer> тегам <footer> :

1
2
3
4
5
6
7
8
9
<body>
    …
    <footer role=»contentinfo»>
        //Footer
    </footer>
     
    <?php wp_footer();
     
</body>

Хотя он увеличивается, поддержка HTML5 программами чтения с экрана различается . С другой стороны, поддержка ориентиров ARIA обычно намного лучше. Поэтому, несмотря на то, что все больше и больше браузеров автоматически сопоставляют семантические теги HTML5 с их соответствующей ролью, все же стоит четко указать эту роль. Однако следует позаботиться о том, чтобы не изменить нативную «роль» семантического элемента. Например, вам следует избегать делать что-то вроде:

1
<h1 role=»button»>Click Me!</h1>

Ниже приведен список некоторых элементов HTML5 вместе с их неявными ролями ARIA.

Элемент HTML5 Подразумеваемая роль ARIA Другие заметки
<header> role="banner" Там должен быть только один экземпляр баннера
<nav> role="navigation"
<main> role="main" Должен быть только один экземпляр основного
<article> role="article"
<aside> role="complementary"
<footer> role="contentinfo" Должен быть только один экземпляр contentinfo
<button> role="button"

При использовании HTML5 вы должны использовать скрипт, подобный HTML5 Shiv v3.6 , как он используется в темах Twenty *, для поддержки устаревших браузеров.

Объявление ролей ARIA — это невероятно простой способ помочь пользователям вспомогательных технологий интерпретировать макет вашего сайта и найти контент, который им нужен. В следующей части этой серии мы рассмотрим принцип обеспечения работоспособности вашей темы. Грубо говоря, это означает, что пользователи должны иметь возможность легко и безопасно перемещаться по вашему сайту.