Проверяет понимание различий между :focus, :focus-within и :focus-visible и умение применять их для доступной стилизации фокуса.
В CSS существует несколько псевдоклассов, связанных с фокусом, и они решают разные задачи. Важно не путать их, потому что от этого зависит и доступность, и внешний вид интерфейса.
element.focus() из JS./* Показываем обводку только при клавиатурной навигации */
button:focus-visible {
outline: 2px solid #1a73e8;
outline-offset: 2px;
}
/* Подсветка всей формы, когда фокус внутри неё */
.form:focus-within {
border-color: #1a73e8;
box-shadow: 0 0 0 3px rgba(26,115,232,.2);
}
/* Убираем стандартный outline только там, где он не нужен */
button:focus:not(:focus-visible) {
outline: none;
}Раньше разработчики часто писали outline: none для :focus, чтобы убрать «некрасивую» рамку после клика мышью. Это ломало доступность: пользователи клавиатуры теряли ориентацию. :focus-visible решает проблему — рамка остаётся для клавиатуры и исчезает для мыши.
Поддержка :focus-visible есть во всех современных браузерах. Для старых можно использовать полифил или фолбэк через :focus.
Итог: применяйте :focus-visible для стилизации индикатора фокуса, :focus-within — для подсветки контейнеров, а :focus — когда нужен любой фокус без исключений.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию