Chakra UI предоставляет мощный и гибкий подход к построению интерфейсов на основе React, уделяя особое внимание семантической разметке и доступности. Семантика играет ключевую роль в создании компонентов, которые правильно интерпретируются браузерами, поисковыми системами и вспомогательными технологиями, такими как скринридеры.
Chakra UI использует компоненты-обертки для стандартных HTML-тегов. Например:
Box — универсальный контейнер, который можно
использовать вместо div, section или
article.Text — компонент для текста, который соответствует тегу
p по умолчанию.Heading — компонент для заголовков с поддержкой уровней
(h1–h6).Пример базовой структуры:
import { Box, Heading, Text } from "@chakra-ui/react";
function Article() {
return (
<Box as="article" p={6} bg="gray.50">
<Heading as="h1" size="xl" mb={4}>
Основы Chakra UI
</Heading>
<Text fontSize="lg">
Chakra UI обеспечивает создание семантически правильных компонентов с минимальными усилиями.
</Text>
</Box>
);
}
Здесь ключевым является использование пропа as, который
позволяет задать конкретный HTML-тег. Box as="article"
превращает универсальный контейнер в семантический тег
article.
as для семантикиПроп as — один из центральных инструментов Chakra UI для
семантической разметки. Он позволяет:
Примеры:
<Heading as="h2">Раздел 1</Heading>
<Text as="cite">Источник информации</Text>
<Button as="a" href="#">Ссылка-кнопка</Button>
Эти примеры показывают, как один и тот же компонент может сохранять визуальный стиль, меняя только семантический тег.
Chakra UI обеспечивает правильную семантику форм через компоненты:
FormControl — контейнер для одного элемента формы с
меткой и возможными ошибками.FormLabel — ассоциированная метка
(label).Input, Textarea, Select —
элементы ввода с встроенной доступностью.FormErrorMessage — отображение ошибок формы.Пример формы:
import { FormControl, FormLabel, Input, FormErrorMessage, Button } from "@chakra-ui/react";
import { useState } from "react";
function LoginForm() {
const [email, setEmail] = useState("");
const [error, setError] = useState("");
const handleSubmit = (e) => {
e.preventDefault();
if (!email.includes("@")) {
setError("Неверный email");
} else {
setError("");
}
};
return (
<form onSub mit={handleSubmit}>
<FormControl isInvalid={error}>
<FormLabel htmlFor="email">Email</FormLabel>
<Input
id="email"
type="email"
value={email}
onCha nge={(e) => setEmail(e.target.value)}
/>
<FormErrorMessage>{error}</FormErrorMessage>
</FormControl>
<Button mt={4} type="submit">Войти</Button>
</form>
);
}
Использование FormControl и FormLabel
гарантирует корректную связь между меткой и полем ввода, что важно для
скринридеров.
Chakra UI позволяет структурировать навигационные элементы:
Nav — можно реализовать через
Box as="nav".Link — семантическая ссылка с поддержкой
стилизации.Breadcrumb — компонент для отображения цепочки
навигации.Пример навигации:
import { Box, Link, HStack } from "@chakra-ui/react";
function Navigation() {
return (
<Box as="nav" bg="blue.50" p={4}>
<HStack spacing={4}>
<Link href="/">Главная</Link>
<Link href="/about">О нас</Link>
<Link href="/contact">Контакты</Link>
</HStack>
</Box>
);
}
Использование as="nav" делает контейнер семантически
корректным элементом навигации, что повышает доступность сайта.
Для списков Chakra UI предоставляет:
UnorderedList (ul) и
OrderedList (ol)ListItem (li)Пример:
import { UnorderedList, ListItem } from "@chakra-ui/react";
function Features() {
return (
<UnorderedList>
<ListItem>Простая стилизация</ListItem>
<ListItem>Семантические компоненты</ListItem>
<ListItem>Доступность по умолчанию</ListItem>
</UnorderedList>
);
}
Правильная семантика списков улучшает восприятие контента для пользователей и поисковых систем.
Chakra UI интегрирует ARIA-атрибуты и автоматически обрабатывает их в компонентах. Например:
aria-label для кнопок и ссылок без текста.aria-invalid для форм с ошибками.role для динамических компонентов, таких как модальные
окна и вкладки.<Button aria-label="Закрыть окно" onCl ick={closeModal}>×</Button>
Это обеспечивает соблюдение стандартов доступности без дополнительного кода.
as для корректной семантики.FormControl,
Heading, Text) вместо прямых HTML-тегов.Семантическая разметка в Chakra UI позволяет создавать гибкие, доступные и хорошо структурированные интерфейсы, минимизируя ручную работу и ошибки.