Генератор вкладок CSS
Вкладки используются повсеместно, в панелях настроек, на сайтах документации и в галереях продуктов. В стандартном HTML нет отдельного элемента вкладки, поэтому разработчики создают собственные. Этот генератор собирает простую панель вкладок на HTML + CSS: акцентный цвет активной вкладки, скругление углов кнопок и состояние при наведении. Вставьте разметку в свой проект и подключите переключение вкладок с помощью собственного JavaScript.
Как создать вкладки
-
1
Выберите акцентный цвет
Цвет фона и текста активной вкладки. Выберите цвет, подходящий вашему бренду.
-
2
Задайте скругление углов
Скругляет верхние углы кнопок вкладок. Большие значения дают более мягкий вид.
-
3
Измените подписи
Результат содержит три кнопки: «Overview», «Details» и «Settings». Переименуйте их под свой контент.
-
4
Скопируйте код
Разметка вкладок поставляется с собственным блоком <style>. Вставьте оба элемента в свою страницу.
-
5
Добавьте переключение вкладок
Генератор создает только визуальную часть. Подключите кнопки к своему JavaScript или UI-библиотеке, чтобы показывать и скрывать панели.
Правильная доступная разметка
<div class="tabs">
<div role="tablist" aria-label="Product info">
<button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1" tabindex="0">Overview</button>
<button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">Specs</button>
<button role="tab" id="tab-3" aria-selected="false" aria-controls="panel-3" tabindex="-1">Reviews</button>
</div>
<section role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</section>
<section role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</section>
<section role="tabpanel" id="panel-3" aria-labelledby="tab-3" hidden>...</section>
</div>
Ключевые атрибуты:
role="tablist"оборачивает кнопки.role="tab"на каждой кнопке, вместе сaria-selectedиaria-controls.tabindexиспользует паттерн roving tabindex: только активная вкладка имеет0, остальные,-1. Клавиши-стрелки перемещают фокус между ними.role="tabpanel"на каждой панели, аaria-labelledbyуказывает на её вкладку.hiddenна неактивных панелях (а не толькоdisplay: none, именно этот атрибут учитывают вспомогательные технологии).
Правила работы с клавиатурой
| Клавиша | Действие |
|---|---|
| Tab | Вход в список вкладок / выход из него |
| ArrowLeft | Предыдущая вкладка (циклически к последней) |
| ArrowRight | Следующая вкладка (циклически к первой) |
| Home | Первая вкладка |
| End | Последняя вкладка |
| Enter / Space | Активировать вкладку в фокусе (при ручной активации) |
Автоматическая активация (переключение вкладок при изменении фокуса) против ручной (активация вкладки при нажатии клавиши Enter при изменении фокуса), WAI-ARIA поддерживает оба способа. Автоматический режим удобнее для пользователей с нормальным зрением; ручной, более подходящий в случаях, когда содержимое вкладок требует значительных ресурсов для отображения.
Подчеркнутый стиль
[role="tablist"] {
display: flex;
border-bottom: 1px solid #e5e7eb;
}
[role="tab"] {
padding: 0.75rem 1rem;
background: transparent;
border: 0;
color: #6b7280;
position: relative;
cursor: pointer;
}
[role="tab"][aria-selected="true"] {
color: #111827;
}
[role="tab"][aria-selected="true"]::after {
content: "";
position: absolute;
left: 1rem; right: 1rem; bottom: -1px;
height: 2px;
background: #2563eb;
}
Капсульный стиль
[role="tab"] {
padding: 0.5rem 0.9rem;
border-radius: 9999px;
border: 0;
background: transparent;
}
[role="tab"][aria-selected="true"] {
background: #2563eb;
color: #fff;
}
Видимый фокус
Всегда отображайте кольцо фокуса, когда фокус приходит с клавиатуры:
[role="tab"]:focus-visible {
outline: 2px solid #60a5fa;
outline-offset: 2px;
}
JavaScript
Приблизительно:
const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => {
tab.addEventListener('click', () => activate(tab));
tab.addEventListener('keydown', e => {
const i = [...tabs].indexOf(tab);
if (e.key === 'ArrowRight') tabs[(i + 1) % tabs.length].focus();
if (e.key === 'ArrowLeft') tabs[(i - 1 + tabs.length) % tabs.length].focus();
if (e.key === 'Home') tabs[0].focus();
if (e.key === 'End') tabs[tabs.length - 1].focus();
});
});
function activate(tab) {
tabs.forEach(t => {
const panel = document.getElementById(t.getAttribute('aria-controls'));
const active = t === tab;
t.setAttribute('aria-selected', active);
t.setAttribute('tabindex', active ? '0' : '-1');
panel.hidden = !active;
});
tab.focus();
}
Всего тридцать строк, без единой зависимости.
Вкладки против аккордеонов
На узких экранах ряды вкладок становятся тесными. Типичный приём: вкладки на десктопе, аккордеон на мобильных устройствах. Чтобы менять визуальное оформление без изменения ARIA-ролей, используйте контейнерный или медиазапрос.
Часто задаваемые вопросы
Для доступных вкладок, да. Без role="tablist" и role="tab" программы чтения с экрана воспринимают эти кнопки как обычные, и пользователи теряют привычную логику навигации по вкладкам. Альтернатива, простой аккордеон на <details> / <summary> со встроенной семантикой.
Автоматический режим (вкладка активируется при перемещении фокуса) подходит, когда содержимое каждой вкладки отображается легко. Ручной режим (фокус перемещается, а вкладка активируется по клавише Enter) лучше, когда переключение вкладок запускает тяжёлую работу, например, загрузку данных или отрисовку большой формы.
Для вкладок с содержимым (документация, вкладки о продукте), да: используйте хеш (например, #specs) или параметр запроса, чтобы ссылки вели на конкретную вкладку, а активная вкладка сохранялась при перезагрузке страницы. Для вкладок интерфейса (панели настроек) URL необязателен.
Только с помощью «хака» на чекбоксах/радиокнопках, у которого нет навигации стрелками и состояний ARIA. Для по-настоящему доступной реализации этот небольшой фрагмент JavaScript оправдан. Если нужны запасные варианты с серверным рендерингом, свяжите каждую вкладку с уникальным URL и отрисовывайте соответствующую панель на стороне сервера.
Сопутствующие инструменты
Справочная таблица ASCII
Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.
Справочник сочетаний клавиш
Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.
Справочник символов HTML
Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.
Счетчик FPS
Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.
Генератор случайных букв
Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.
Генератор цветовой палитры
Создавайте монохромные, аналоговые, комплементарные, триадные или тетрадные палитры из базового HEX-цвета и экспортируйте готовые CSS-переменные.
Инструмент доступен на других языках
- CSS 탭 생성기 [KO]
- Trình tạo tab CSS [VI]
- CSS Tabs Generator [NL]
- CSS标签生成器 [ZH]
- CSS-Tabs-Generator [DE]
- CSS Tabs Generator [EN]
- Generator Tab CSS [ID]
- CSS-flikgenerator [SV]
- Generator kart (tabs) CSS [PL]
- مولد علامات التبويب CSS [AR]
- ตัวสร้างแท็บส์ CSS [TH]
- Generador de Pestañas CSS [ES]
- Générateur d'onglets CSS [FR]
- Gerador de Abas CSS [PT]
- CSSタブジェネレーター [JA]
- CSS Tab Generatörü [TR]
- Generatore di schede CSS [IT]