Доступность (Accessibility, A11y) — критический аспект веб-разработки, который обеспечивает возможность использования приложений людьми с различными особенностями восприятия и взаимодействия. Во Fresh, как и в любом современном фреймворке на JavaScript, правильная организация доступности требует сочетания семантической разметки, ARIA-атрибутов и внимательного подхода к управлению состоянием интерфейса.
Fresh использует JSX-подобный синтаксис для описания компонентов, что позволяет легко применять стандартные HTML-элементы с семантическим значением. Использование правильных тегов критически важно для доступности:
<button> вместо
<div> или <span> с обработчиком
клика. Кнопка автоматически поддерживает фокус и взаимодействие с
клавиатуры.<nav>,
<main>,
<header>,
<footer> для логической структуры
страницы. Скринридеры используют эти теги для навигации.<label> для всех форм,
связывающий текст с элементом ввода через атрибут for. Это
улучшает понимание контекста полей форм для ассистивных технологий.Пример использования формы с корректной разметкой:
<form>
<label for="username">Имя пользователя</label>
<input id="username" type="text" name="username" required />
<label for="password">Пароль</label>
<input id="password" type="password" name="password" required />
<button type="submit">Войти</button>
</form>
ARIA (Accessible Rich Internet Applications) предоставляет средства для описания состояния и роли элементов, которые не могут быть выражены семантическими HTML-тегами. Fresh поддерживает динамический рендеринг, поэтому ARIA особенно полезна для интерактивных компонентов, таких как модальные окна, аккордеоны и меню:
role определяет роль элемента
(например, dialog, menuitem).aria-expanded указывает состояние
сворачивания/разворачивания.aria-hidden скрывает контент от
скринридеров.aria-live используется для уведомлений
о динамическом контенте.Пример аккордеона во Fresh:
export default function Accordion({ title, children }) {
const [open, setOpen] = useState(false);
return (
<div>
<button
aria-expanded={open}
onCl ick={() => setOpen(!open)}
>
{title}
</button>
<div aria-hidden={!open}>
{open && children}
</div>
</div>
);
}
Клавиатурная навигация — один из ключевых аспектов доступности. Fresh позволяет управлять фокусом через стандартные методы DOM и React-подобные рефы. Важные моменты:
const modalRef = useRef(null);
useEffect(() => {
modalRef.current?.focus();
}, []);
aria-hidden или inert.Fresh не накладывает ограничений на стили, поэтому контроль контраста и цветовой схемы полностью ложится на разработчика:
Для Fresh важно строить DOM так, чтобы изменения интерфейса были предсказуемы:
aria-live="polite" или
aria-live="assertive", в зависимости от
критичности информации.Пример уведомления о статусе загрузки:
<div aria-live="polite">
{loading ? "Загрузка данных..." : "Данные загружены"}
</div>
Эти принципы создают основу доступности приложений во Fresh и формируют интерфейсы, удобные для всех категорий пользователей.