Библиотека Axe-core предназначена для автоматизированного выявления проблем доступности веб-страниц. Она предоставляет детальные отчёты о нарушениях стандартов WCAG и позволяет интегрировать проверку доступности прямо в процессы разработки.
Для использования библиотеки необходимо установить пакет через npm:
npm install axe-core
Или подключить его через CDN в браузере:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.8.3/axe.min.js"></script>
После подключения можно инициировать проверку на странице:
import axe from 'axe-core';
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
results.violations содержит массив объектов с подробной
информацией о нарушениях доступности: идентификатор правила, описание
проблемы, рекомендации по исправлению и элементы DOM, на которых
обнаружено нарушение.
Каждое нарушение представлено объектом с ключевыми полями:
"color-contrast"."critical", "serious",
"moderate", "minor").Пример объекта нарушения:
{
"id": "color-contrast",
"impact": "serious",
"description": "Текст недостаточно контрастен с фоном.",
"help": "Использовать цвета с более высоким контрастом.",
"nodes": [
{
"html": "<p style=\"color:#ccc;\">Текст</p>",
"target": ["p"]
}
],
"tags": ["wcag2aa", "wcag143"]
}
Описание: Недостаточный контраст между текстом и фоном затрудняет чтение пользователям с нарушениями зрения. Рекомендации:
Пример исправления:
<p style="color:#000; background-color:#fff;">Текст</p>
Описание: Отсутствие атрибута alt
делает изображение недоступным для скринридеров.
Рекомендации:
alt="".<img src="chart.png" alt="Диаграмма продаж за 2025 год">
Описание: Неправильная структура заголовков нарушает иерархию документа и усложняет навигацию. Рекомендации:
<h1> → <h2> →
<h3> и т.д.).<h1> сразу к
<h3>.<h1>Главная тема</h1>
<h2>Подтема 1</h2>
<h3>Детали под темы 1</h3>
Описание: Элементы управления должны быть доступными с клавиатуры и иметь визуальный индикатор фокуса. Рекомендации:
tabindex для управляемых элементов.button:focus {
outline: 3px solid #005fcc;
}
Описание: ARIA-атрибуты помогают скринридерам корректно интерпретировать элементы интерфейса. Рекомендации:
aria-label — для кнопок без текста.role="alert" — для сообщений об ошибках.<button aria-label="Закрыть окно">×</button>
import { configureAxe, toHaveNoViolations } from 'jest-axe';
expect.extend(toHaveNoViolations);
test('страница должна быть доступной', async () => {
const axe = configureAxe();
const results = await axe(document.body);
expect(results).toHaveNoViolations();
});
import 'cypress-axe';
describe('Проверка доступности', () => {
it('страница без нарушений', () => {
cy.visit('/');
cy.injectAxe();
cy.checkA11y();
});
});
Axe-core позволяет отключать определённые правила или задавать кастомные конфигурации:
axe.run(document, {
rules: {
'color-contrast': { enabled: false },
'image-alt': { enabled: true }
}
});
Можно создавать собственные правила для специфических требований проекта, задавая селекторы, условия и сообщения для пользователей.
Для упрощения исправления можно выводить отчёт в консоль с форматированием:
axe.run(document).then(results => {
results.violations.forEach(violation => {
console.group(`${violation.id} (${violation.impact})`);
console.log(violation.description);
violation.nodes.forEach(node => console.log(node.html));
console.groupEnd();
});
});
Также возможна интеграция с CI/CD для автоматической проверки доступности при каждом билде.
impact: critical).