Гид по технологиям

Доступный индикатор прогресса в React

3 min read Frontend Обновлено 09 Jan 2026
Доступный индикатор прогресса в React
Доступный индикатор прогресса в React

шестерёнки на тёмном фоне

TL;DR

Кратко: покроем, как создать доступный индикатор прогресса (progress bar) в React с ARIA-атрибутами, простыми стилями и проверкой на скринридерах. В статье — код компонента, варианты стилизации, тестовый чек‑лист и критерии приёмки.

Прогресс-бары повышают вовлечённость: пользователи видят цель и знают, сколько осталось. Но визуальная индикация должна быть доступна и людям, использующим вспомогательные технологии. Ниже — пошаговая инструкция по созданию переиспользуемого и доступного ProgressBar в React.

Создайте компонент ProgressBar

Создайте файл ProgressBar.js и добавьте следующий код:

const ProgressBar = ({progress}) => {  
    return (  
        
            
                {`${progress}%`}             
        
    ); };    export default ProgressBar;

Первый div — контейнер, второй — сама полоса прогресса. span показывает процент.

Для доступности у внутреннего div есть:

  • role=”progressbar” — объявляет элемент как индикатор прогресса.
  • aria-valuenow — текущее значение (например, 50).
  • aria-valuemin — минимальное значение.
  • aria-valuemax — максимальное значение.

Примечание: aria-valuemin и aria-valuemax необязательны, если диапазон по умолчанию 0–100.

Стилизация индикатора

Ширина заполненной части зависит от пропса progress, поэтому удобнее передавать стиль из компонента. Пример inline‑стилей:

const container = {  
    height: 20,  
    width: "100%",  
    backgroundColor: "#fff",  
    borderRadius: 50,  
    margin: 50  
}  
   
const bar = {  
    height: "100%",  
    width: `${progress}%`,  
    backgroundColor: "#90CAF9",  
    borderRadius: "inherit",  
}  
   
const label = {  
    padding: "1rem",  
    color: "#000000",  
}  

И используйте их в разметке:

  
      
        {`${progress}%`}  
    

Отрисовка компонента:

  

Это отображает полосу на 50%.

Дополнительные рекомендации по доступности

  • Добавьте aria-label или aria-labelledby, если контекст не очевиден: aria-label=”Загрузка файла”.
  • Если значение изменяется динамически, подумайте о live‑регионе (например, aria-live=”polite”) у скрытого элемента, чтобы скринридер озвучивал обновления.
  • Для пользователей клавиатуры обеспечьте фокусируемость и понятную последовательность Tab.
  • Проверьте цветовой контраст заполненной и пустой частей — не полагайтесь только на цвет для передачи информации.

Альтернативные подходы

  • Использовать нативный элемент : он имеет встроенную семантику, но гибкость стилей ниже.
  • Библиотеки компонентов (Material UI, Ant Design) уже содержат доступные индикаторы; используйте их, если нужны готовые решения.
  • Для сложных сценариев — комбинировать SVG и ARIA: SVG даёт гибкость рисунка, ARIA — семантику.

Тесты и чек-лист приёмки

Краткий чек‑лист для тестирования перед деплоем:

  • aria-valuenow корректно отражает progress при разных значениях.
  • aria-valuemin и aria-valuemax установлены или верно опущены.
  • Цветовой контраст соответствует рекомендациям WCAG (проверьте инструменты).
  • Скринридер (NVDA/VoiceOver/JAWS) озвучивает значение при загрузке и при обновлении (при необходимости).
  • Полоса реагирует на изменение размера окна и адаптируется на мобильных устройствах.
  • Компонент доступен с клавиатуры (если он интерактивен).

Критерии приёмки

  1. При значении progress=0 скринридер сообщает 0% (или другое текстовое описание).
  2. При прогрессе 100% элемент отмечается как завершённый и при необходимости скрывается или заменяется сообщением.
  3. Визуально и семантически информация о прогрессе передаётся без использования только цвета.

Когда этот подход не сработает

  • Если требуется сложная анимация с высокой производительностью на старых устройствах — inline‑стили и перерендеры могут оказывать нагрузку; лучше использовать CSS-анимации или requestAnimationFrame.
  • Для очень нестандартной визуализации лучше SVG или canvas с явной семантикой ARIA.

Полезная методология быстрого внедрения

  1. Реализуйте минимальный компонент с role=”progressbar” и aria-valuenow.
  2. Добавьте стили и тесты контраста.
  3. Прогоните тесты с основными скринридерами и на мобильных браузерах.
  4. Обновите документацию компонента и добавьте истории в Storybook.

Короткое резюме

Доступный индикатор прогресса в React — это комбинация правильной семантики (role, aria‑атрибуты), адаптивных стилей и тестирования с вспомогательными технологиями. Простая реализация легко масштабируется и может служить блоком для сложных интерфейсов.

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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство