SkipNav — это компонент, предназначенный для улучшения
доступности веб-приложений. Он позволяет пользователям с клавиатурой или
вспомогательными технологиями (например, экранными читалками) сразу
переходить к основному содержимому страницы, минуя навигационные панели,
баннеры и другие повторяющиеся элементы.
Chakra UI реализует эту функциональность через два основных
компонента: SkipNavLink и SkipNavContent.
SkipNavLink создаёт ссылку, которая остаётся визуально
скрытой до тех пор, пока пользователь не получит на неё фокус. Обычно
она размещается в начале документа.
import { SkipNavLink, SkipNavContent } from "@chakra-ui/react";
function App() {
return (
<>
<SkipNavLink>Перейти к основному контенту</SkipNavLink>
<Header />
<Sidebar />
<SkipNavContent />
<MainContent />
</>
);
}
Ключевые моменты:
App или страницы, чтобы она была доступна
сразу при загрузке.SkipNavContent используется для указания места, куда
будет переносить фокус SkipNavLink. Обычно это основной
блок с контентом страницы.
<SkipNavContent>
<main>
<h1>Главная статья</h1>
<p>Содержимое страницы...</p>
</main>
</SkipNavContent>
Особенности использования:
По умолчанию SkipNavLink скрыт с помощью CSS, чтобы не
мешать обычным пользователям. В Chakra UI это реализовано через
srOnly стили. При получении фокуса ссылку можно
визуализировать с помощью встроенных возможностей Chakra:
<SkipNavLink
zIndex="skipLink"
p={4}
bg="blue.500"
color="white"
fontWeight="bold"
_focus={{ outline: "none", bg: "blue.600" }}
>
Перейти к основному контенту
</SkipNavLink>
Если приложение использует маршрутизацию, SkipNav
работает без дополнительной настройки. Достаточно поместить
SkipNavLink в верхнюю часть корневого компонента, а
SkipNavContent перед основным маршрутом.
function App() {
return (
<>
<SkipNavLink>Пропустить навигацию</SkipNavLink>
<Header />
<Routes>
<Route
path="/"
element={
<SkipNavContent>
<HomePage />
</SkipNavContent>
}
/>
<Route
path="/about"
element={
<SkipNavContent>
<AboutPage />
</SkipNavContent>
}
/>
</Routes>
</>
);
}
SkipNavContent.SkipNavLink останется универсальной для всего
приложения.SkipNav должен быть первым в DOM,
чтобы избежать проблем с фокусом.Можно настроить цвета и z-index через тему:
const theme = extendTheme({
components: {
SkipNavLink: {
baseStyle: {
zIndex: "tooltip",
bg: "teal.500",
color: "white",
_focus: { bg: "teal.600" },
},
},
},
});
Это позволяет централизованно управлять стилями и делать ссылку согласованной с визуальной системой приложения.
На мобильных устройствах SkipNavLink обычно остаётся
скрытой, так как пользователи используют сенсорный экран. Chakra UI
автоматически применяет srOnly стили, что делает компонент
невидимым для сенсорного интерфейса, но доступным для технологий
вспомогательного доступа.
import { ChakraProvider, SkipNavLink, SkipNavContent, Box, Heading, Text } from "@chakra-ui/react";
function Page() {
return (
<ChakraProvider>
<SkipNavLink>Перейти к основному контенту</SkipNavLink>
<Box as="header" bg="gray.200" p={4}>Шапка сайта</Box>
<SkipNavContent>
<Box as="main" p={6}>
<Heading>Главная статья</Heading>
<Text mt={4}>
Здесь находится основной контент страницы, который можно сразу прочитать после использования SkipNavLink.
</Text>
</Box>
</SkipNavContent>
<Box as="footer" bg="gray.100" p={4}>Футер</Box>
</ChakraProvider>
);
}
SkipNavLink располагается перед всеми элементами,
которые нужно пропустить.SkipNavContent ограждает основной контент, обеспечивая
корректный фокус и доступность.