FAST Element предоставляет мощный инструмент для создания веб-компонентов с соблюдением современных стандартов доступности (Accessibility, A11y). Фокус на доступности особенно важен для форм, поскольку они являются основным способом взаимодействия пользователей с интерфейсом. Библиотека FAST предоставляет встроенные механизмы и рекомендации для правильной разметки, управления фокусом, взаимодействия с клавиатурой и совместимости с вспомогательными технологиями.
Семантическая разметка — основа доступных форм.
Любой компонент формы должен опираться на стандартные HTML-элементы:
<input>, <textarea>,
<select>, <label>,
<fieldset>, <legend>. FAST Element
позволяет оборачивать эти элементы в кастомные компоненты без потери
семантики.
Пример использования:
import { FASTElement, html, css } from "@microsoft/fast-element";
const template = html`
<label for="username">Имя пользователя</label>
<input id="username" type="text" />
`;
export class UserForm extends FASTElement {
static template = template;
}
Ключевые моменты:
for на <label> связывает
метку с полем ввода, что улучшает совместимость с экранными
читалками.<input>
сохраняет нативное поведение и доступность.Фокусировка и навигация клавиатурой критичны для пользователей, которые не могут использовать мышь. FAST Element позволяет контролировать фокус через стандартные события и атрибуты:
tabindex управляет порядком перехода по элементам.focus() программно переводит фокус на элемент.focus и blur помогают отслеживать
активные поля.Пример:
this.shadowRoot.getElementById("username").focus();
Рекомендуется использовать tabindex="0" для
интерактивных элементов и избегать отрицательных значений, чтобы не
нарушать естественный порядок табуляции.
Для кастомных элементов форм FAST Element предоставляет возможность добавлять ARIA-атрибуты для обеспечения доступности:
aria-label и aria-labelledby — определяют
текстовое описание элемента.aria-describedby — связывает элемент с дополнительной
инструкцией или сообщением об ошибке.aria-required, aria-invalid — указывают
обязательность поля и статус валидации.Пример:
<input
id="email"
type="email"
aria-label="Электронная почта"
aria-required="true"
/>
<span id="email-error" role="alert">Неверный формат email</span>
Важная часть доступной формы — предоставление информации об ошибках. FAST Element позволяет динамически обновлять DOM и связывать сообщения с полями через ARIA:
const input = this.shadowRoot.getElementById("email");
const error = this.shadowRoot.getElementById("email-error");
if (!validateEmail(input.value)) {
input.setAttribute("aria-invalid", "true");
input.setAttribute("aria-describedby", "email-error");
error.textContent = "Неверный формат email";
} else {
input.removeAttribute("aria-invalid");
input.removeAttribute("aria-describedby");
error.textContent = "";
}
Особенности:
role="alert" гарантирует, что экранные читалки
немедленно озвучат ошибку.aria-describedby делает информацию о
состоянии видимой для вспомогательных технологий.FAST Element поддерживает динамическое добавление и удаление полей формы. Для доступности важно обновлять ARIA-атрибуты и управлять фокусом:
const newField = document.createElement("input");
newField.setAttribute("aria-label", "Дополнительная информация");
newField.tabIndex = 0;
this.shadowRoot.appendChild(newField);
newField.focus();
Рекомендуется:
aria-* для корректной озвучки.Для сложных форм с несколькими связанными полями используются
<fieldset> и <legend> или их
кастомные аналоги в FAST Element. Это позволяет:
Пример:
<fieldset>
<legend>Контактные данные</legend>
<input type="text" id="phone" aria-label="Телефон" />
<input type="email" id="email" aria-label="Email" />
</fieldset>
FAST Element сохраняет совместимость с экранными читалками при соблюдении следующих правил:
label и input.role="alert" или
aria-live.Эти принципы позволяют создавать формы на FAST Element, которые будут удобны для всех пользователей, включая людей с ограниченными возможностями.