Настройка ARIA-атрибутов для элементов интерфейса 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка ARIA-атрибутов для элементов интерфейса 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка ARIA-атрибутов для элементов интерфейса 1С-Битрикс

ARIA (Accessible Rich Internet Applications) — это набор атрибутов для разметки интерфейсных виджетов, у которых нет нативного HTML-аналога. Дропдаун-меню, аккордеон, табы, модальные окна — всё это интерактивные паттерны, про которые браузер ничего не знает без явной ARIA-разметки. Screen reader видит кастомный компонент Битрикса как набор безымянных div-ов.

Первое правило ARIA: не использовать без необходимости

Нативный HTML всегда предпочтительнее. <button> лучше <div role="button">, <nav> лучше <div role="navigation">. Прежде чем добавлять ARIA — проверить, нет ли подходящего тега. В шаблонах Битрикса часто встречается:

<!-- Плохо: клик на div без семантики -->
<div class="add-to-cart" onclick="addToCart(1234)">В корзину</div>

<!-- Хорошо: нативная кнопка -->
<button type="button" class="add-to-cart" data-product-id="1234">В корзину</button>

Навигационные меню: bitrix:menu

Компонент bitrix:menu генерирует структуру списков без навигационных ориентиров. Если на странице несколько меню (главное, футер, сайдбар) — screen reader не может их различить.

В шаблоне компонента добавляем обёртку с ролью и меткой:

<nav aria-label="Главное меню">
    <?php $APPLICATION->IncludeComponent('bitrix:menu', 'main', [...]) ?>
</nav>

<nav aria-label="Меню в подвале">
    <?php $APPLICATION->IncludeComponent('bitrix:menu', 'footer', [...]) ?>
</nav>

Для дропдаун-пунктов меню нужны атрибуты aria-expanded и aria-haspopup:

<button aria-haspopup="true" aria-expanded="false" aria-controls="submenu-catalog">
    Каталог
</button>
<ul id="submenu-catalog" role="menu">
    <li role="menuitem"><a href="/catalog/">Все товары</a></li>
</ul>

JavaScript переключает aria-expanded при открытии/закрытии подменю.

Вкладки (табы) в карточке товара

Компонент catalog.element часто содержит табы: «Описание», «Характеристики», «Отзывы». Без ARIA это просто список ссылок с JavaScript. С ARIA это полноценный tab-виджет:

<div role="tablist" aria-label="Информация о товаре">
    <button role="tab" aria-selected="true" aria-controls="tab-description" id="tab-btn-description">
        Описание
    </button>
    <button role="tab" aria-selected="false" aria-controls="tab-specs" id="tab-btn-specs" tabindex="-1">
        Характеристики
    </button>
</div>

<div role="tabpanel" id="tab-description" aria-labelledby="tab-btn-description">
    <?= $arResult['DETAIL_TEXT'] ?>
</div>
<div role="tabpanel" id="tab-specs" aria-labelledby="tab-btn-specs" hidden>
    <!-- характеристики -->
</div>

Неактивные табы получают tabindex="-1" — фокус перемещается по ним стрелками, а не Tab. Это стандартный паттерн WAI-ARIA Authoring Practices для roving tabindex.

Live-регионы для AJAX-обновлений

Когда Битрикс обновляет цену при выборе SKU или показывает «Добавлено в корзину» — screen reader об этом не знает без явного уведомления. Решение — aria-live регион:

<div aria-live="polite" aria-atomic="true" class="sr-only" id="cart-status"></div>

При добавлении товара в корзину JavaScript меняет текст:

document.getElementById('cart-status').textContent = 'Товар добавлен в корзину';

Класс sr-only скрывает элемент визуально, но оставляет доступным для screen reader:

.sr-only {
    position: absolute; width: 1px; height: 1px;
    padding: 0; margin: -1px; overflow: hidden;
    clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

Формы и сообщения об ошибках

При ошибке валидации формы (компонент bitrix:main.register, форма заказа) сообщение об ошибке должно быть связано с полем через aria-describedby:

<input type="email" id="USER_EMAIL" aria-describedby="email-error" aria-invalid="true">
<span id="email-error" role="alert">Введите корректный email</span>

role="alert" автоматически объявляется screen reader при появлении в DOM — не нужен aria-live.