Реализация Skip Navigation для доступности сайта

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация Skip Navigation для доступности сайта
Простая
~2-3 часа
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Реализация Skip Navigation для доступности сайта

Skip Navigation («Перейти к содержимому») — ссылка в начале страницы, позволяющая пользователям screen reader и клавиатурной навигации пропустить повторяющийся блок навигации и сразу перейти к основному содержимому. WCAG SC 2.4.1 (уровень A) — обязательное требование.

Базовая реализация

<!DOCTYPE html>
<html>
<head>
    <style>
        .skip-link {
            position: absolute;
            top: -100px;
            left: 0;
            padding: 8px 16px;
            background: #000;
            color: #fff;
            font-weight: bold;
            z-index: 9999;
            text-decoration: none;
            transition: top 0.1s;
        }

        .skip-link:focus {
            top: 0;
        }
    </style>
</head>
<body>
    <!-- Первый элемент на странице -->
    <a href="#main-content" class="skip-link">Перейти к содержимому</a>

    <header>
        <nav><!-- навигация --></nav>
    </header>

    <main id="main-content" tabindex="-1">
        <!-- Основной контент -->
    </main>
</body>
</html>

tabindex="-1" на <main> необходим — <main> не принимает фокус по умолчанию, а ссылка должна переносить фокус именно туда.

Несколько Skip-ссылок

На сложных страницах добавляют несколько ссылок:

<nav class="skip-links" aria-label="Быстрая навигация">
    <a href="#main-content" class="skip-link">Перейти к содержимому</a>
    <a href="#main-nav" class="skip-link">Перейти к навигации</a>
    <a href="#search" class="skip-link">Перейти к поиску</a>
</nav>

React-компонент

function SkipNavigation() {
    return (
        <nav aria-label="Быстрая навигация">
            <a
                href="#main-content"
                className="skip-nav-link"
            >
                Перейти к содержимому
            </a>
        </nav>
    );
}

// В App.tsx
function App() {
    return (
        <>
            <SkipNavigation />
            <Header />
            <main id="main-content" tabIndex={-1}>
                <Routes />
            </main>
            <Footer />
        </>
    );
}
/* Tailwind */
.skip-nav-link {
    @apply absolute -top-full left-0 z-50 px-4 py-2
           bg-black text-white font-bold
           focus:top-0 transition-all;
}

SPA: сброс фокуса при навигации

В SPA ссылка «Перейти к содержимому» работает один раз. При переходе между страницами нужно программно переносить фокус:

function usePageFocusReset() {
    const location = useLocation();
    const mainRef = useRef<HTMLElement>(null);

    useEffect(() => {
        mainRef.current?.focus();
        // Опционально: скролл в начало
        window.scrollTo(0, 0);
    }, [location.pathname]);

    return mainRef;
}

function Layout() {
    const mainRef = usePageFocusReset();

    return (
        <>
            <SkipNavigation />
            <Header />
            <main id="main-content" tabIndex={-1} ref={mainRef}>
                <Outlet />
            </main>
        </>
    );
}

Срок реализации

1–2 часа включая CSS-стили и тестирование с клавиатурой.