Компонент вкладок: приём :checked и JS
Реализуйте интерфейс вкладок с помощью техники CSS :checked и сравните её с подходом на JavaScript.
«Компонент вкладок: приём :checked и JS» — бесплатный урок CSS Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CSS Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CSS Academy содержит 4 уроков всего.
Требования к компоненту вкладок
Компоненту вкладок необходимы: визуальный индикатор активной вкладки, связанная с ней панель, отображаемая или скрытая при выборе, навигация между вкладками с клавиатуры и доступные атрибуты ARIA. Всё это можно реализовать с помощью чистого CSS, используя приём на основе проверенного состояния, или с помощью JavaScript для более полной поддержки доступности.
Приём с проверенным переключателем
Скрытые радиопереключатели служат состоянием: каждая вкладка является элементом <label>, связанным с радиопереключателем. Когда радиопереключатель выбран, комбинаторы соседних элементов CSS показывают соответствующую панель и стилизуют метку активной вкладки. JavaScript не требуется.
<div class="tabs">
<input type="radio" name="tabs" id="tab-1" checked hidden />
<label for="tab-1">Tab One</label>
<div id="panel-1">Panel one content</div>
</div>
Архитектура CSS с проверенным состоянием
Разместите в одном контейнере сначала радиопереключатели, затем все метки (вкладки), а после них — все панели. Используйте общий комбинатор соседних элементов (~), чтобы связать выбранный радиопереключатель с соответствующей панелью. По умолчанию панели получают display: none; соответствующая панель получает display: block.
Ограничения подхода с проверенным состоянием
Приём с проверенным состоянием не может обновлять атрибуты ARIA, обозначающие выбранность и связь с панелью, не позволяет включить навигацию между вкладками стрелками, а ограничения порядка элементов в DOM (переключатели должны находиться перед панелями) могут конфликтовать с требованиями визуального дизайна. Эти недостатки ограничивают полноценную доступность.
Компонент вкладок на JavaScript
Компонент вкладок на JS отслеживает события щелчка по кнопкам вкладок, устанавливает признак выбранной вкладки, обновляет состояние скрытия панелей и управляет фокусом. Такой подход обеспечивает полное соответствие ARIA и шаблоны взаимодействия с клавиатурой согласно рекомендациям ARIA по разработке.
Роли ARIA для вкладок
Используйте role="tablist" для контейнера, role="tab" для каждой кнопки вкладки вместе с aria-selected и aria-controls, а role="tabpanel" — для каждой панели вместе с aria-labelledby. Программы чтения с экрана озвучивают количество вкладок, позицию и состояние выбранности.
Шаблон взаимодействия с клавиатурой
Рекомендации ARIA по разработке вкладок: клавиша Tab входит в список вкладок и переводит фокус на активную вкладку. Стрелки влево и вправо перемещают фокус между вкладками. Клавиши Home и End переходят к первой и последней вкладке. Каждое перемещение стрелкой активирует сфокусированную вкладку — это шаблон автоматической активации.
CSS для активного состояния
Стилизуйте активную вкладку с помощью нижней границы или изменения фона, используя селектор [aria-selected="true"]; он работает и с подходом на JS, и с подходом с проверенным состоянием. Так CSS синхронизируется с атрибутом состояния ARIA, не требуя двойного управления состоянием.
<div role="tablist">
<button role="tab" aria-selected="true">Overview</button>
<button role="tab" aria-selected="false">Details</button>
</div>
Анимированный индикатор
Анимированный индикатор вкладок перемещается между вкладками: разместите абсолютно позиционированный элемент-индикатор, с помощью JavaScript задайте его положение по горизонтали и ширину в соответствии с размерами активной вкладки и добавьте анимацию с помощью transition: left 200ms ease, width 200ms ease.
Адаптивное переполнение вкладок
Если на небольших экранах вкладки выходят за пределы контейнера, используйте горизонтальную прокрутку (overflow-x: auto; scrollbar-width: none) или на мобильных устройствах сворачивайте их в раскрывающийся список. Подход с раскрывающимся списком требует синхронизации встроенного списка выбора с видимостью панели вкладок с помощью JS.
Только CSS или JS: когда что использовать
Используйте трюк с :checked для простого некритичного интерфейса, где доступность не является приоритетным требованием. Используйте вкладки на JavaScript для любого готового к эксплуатации интерфейса, предназначенного для пользователей клавиатуры, пользователей программ чтения с экрана или приложений, которым требуется соответствие ARIA при аудитах или в силу юридических требований.
Проверка знаний
Каково основное ограничение доступности трюка с CSS :checked для вкладок?
Итоги
Трюк с :checked позволяет переключать вкладки только средствами CSS с помощью радиокнопок и комбинаторов соседних элементов, но не обеспечивает поддержку ARIA и доступность с клавиатуры. Вкладки на JavaScript с ролями ARIA (tablist, tab, tabpanel), управлением aria-selected и обработкой клавиш стрелок обеспечивают полноценный доступный интерфейс, необходимый для готовых к эксплуатации компонентов.
Часто задаваемые вопросы
Урок «Компонент вкладок: приём :checked и JS» бесплатный?
Да — полный текст урока «Компонент вкладок: приём :checked и JS» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CSS Academy, подпишись на CoddyKit PRO. Курс CSS Academy содержит 4 уроков всего.
Чему я научусь в уроке «Компонент вкладок: приём :checked и JS»?
Реализуйте интерфейс вкладок с помощью техники CSS :checked и сравните её с подходом на JavaScript. Ты практикуешь CSS Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CSS Academy?
Предыдущий опыт не требуется. CSS Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Компонент вкладок: приём :checked и JS»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CSS Academy?
Да. Каждый урок CSS Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Компонент карточки с пользовательскими свойствами CSS
- Стилизация модальных окон и диалогов
- Шаблоны выпадающих списков и всплывающих окон
- Компонент вкладок: приём :checked и JS