Data API, клавиатура, отключённая вкладка, вертикальное меню и CSS-переменные.
Каждый пример независим. Кнопка «Показать код» раскрывает HTML, JavaScript и CSS,
которые используются в самом примере. Стили оболочки и кнопок предоставляет OKAUX 1.0.2.
Клик, стрелки, Home и End переключают панели. Отключённая вкладка пропускается; введённый текст сохраняется в DOM.
Откройте историю мышью или стрелкой вправо. Значение поля сохранится при переключении.
Заметка
Эта вкладка отключена.
Показать код
<div class="tabs-demo" id="tabs-basic-demo">
<div class="vg-tabs">
<div class="vg-tabs-panel" role="tablist" aria-label="Разделы примера">
<button type="button" class="vg-tabs-link active" id="tabs-basic-0-tab" data-vg-toggle="tab" data-vg-target="#tabs-basic-0" aria-controls="tabs-basic-0">Обзор</button>
<button type="button" class="vg-tabs-link" id="tabs-basic-1-tab" data-vg-toggle="tab" data-vg-target="#tabs-basic-1" aria-controls="tabs-basic-1">История</button>
<button type="button" class="vg-tabs-link" id="tabs-basic-2-tab" data-vg-toggle="tab" data-vg-target="#tabs-basic-2" aria-controls="tabs-basic-2" disabled>Недоступно</button>
</div>
</div>
<div class="vg-tabs-content tabs-demo-content">
<div class="vg-tabs-pane fade show active" id="tabs-basic-0" tabindex="0">Откройте историю мышью или стрелкой вправо. Значение поля сохранится при переключении.</div>
<div class="vg-tabs-pane fade" id="tabs-basic-1" tabindex="0"><label>Заметка <input class="form-control" type="text" value="Проверить документы"></label></div>
<div class="vg-tabs-pane fade" id="tabs-basic-2" tabindex="0">Эта вкладка отключена.</div>
</div>
</div>
/**
* Описание: декларативный пример VGTabs.
* Возможности: автоматическая обработка вкладок через Data API.
*/
// Дополнительная инициализация не требуется: используется Data API.
/* Токены OKAUX в демо настроены с префиксом vg; состояние темы общее. */
.tabs-demo { min-width: 0; }
.tabs-demo-content {
margin-top: 1rem;
padding: 1rem;
border: 1px solid var(--vg-border-default);
border-radius: var(--vg-radius-md);
background: var(--vg-bg-secondary);
overflow-wrap: anywhere;
}
.tabs-demo-custom {
--vg-tabs-panel-gap: 0.35rem;
--vg-tabs-link-padding-x: 0.75rem;
--vg-tabs-slider-border-radius: 999px;
--vg-tabs-track-slider-border-radius: 999px;
}
.tabs-demo-vertical {
display: grid;
grid-template-columns: 150px minmax(0, 1fr);
align-items: start;
gap: 1rem;
}
.tabs-demo-vertical > .tabs-demo-content { margin-top: 0; }
@media (max-width: 575.98px) {
.tabs-demo-vertical { grid-template-columns: minmax(0, 1fr); }
}
.tabs-demo-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; margin-bottom: 1rem; }
.tabs-demo-status { margin-top: 1rem; }
.tabs-demo-log { max-width: 100%; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 0.85rem; }
Кнопки расположены слева в колонке шириной 150 px, контент — справа. Стрелки вверх и вниз переключают разделы. На узком экране контент переносится под кнопки.
Профиль: содержимое самостоятельной панели.
Доступ: содержимое самостоятельной панели.
Показать код
<div class="tabs-demo tabs-demo-vertical" id="tabs-vertical-demo">
<div class="vg-tabs">
<div class="vg-tabs-panel vg-tabs-column" role="tablist" aria-label="Разделы примера" aria-orientation="vertical">
<button type="button" class="vg-tabs-link active" id="tabs-vertical-0-tab" data-vg-toggle="tab" data-vg-target="#tabs-vertical-0" aria-controls="tabs-vertical-0">Профиль</button>
<button type="button" class="vg-tabs-link" id="tabs-vertical-1-tab" data-vg-toggle="tab" data-vg-target="#tabs-vertical-1" aria-controls="tabs-vertical-1">Доступ</button>
</div>
</div>
<div class="vg-tabs-content tabs-demo-content">
<div class="vg-tabs-pane show active" id="tabs-vertical-0" tabindex="0">Профиль: содержимое самостоятельной панели.</div>
<div class="vg-tabs-pane" id="tabs-vertical-1" tabindex="0">Доступ: содержимое самостоятельной панели.</div>
</div>
</div>
/**
* Описание: декларативный пример VGTabs.
* Возможности: автоматическая обработка вкладок через Data API.
*/
// Дополнительная инициализация не требуется: используется Data API.
/* Токены OKAUX в демо настроены с префиксом vg; состояние темы общее. */
.tabs-demo { min-width: 0; }
.tabs-demo-content {
margin-top: 1rem;
padding: 1rem;
border: 1px solid var(--vg-border-default);
border-radius: var(--vg-radius-md);
background: var(--vg-bg-secondary);
overflow-wrap: anywhere;
}
.tabs-demo-custom {
--vg-tabs-panel-gap: 0.35rem;
--vg-tabs-link-padding-x: 0.75rem;
--vg-tabs-slider-border-radius: 999px;
--vg-tabs-track-slider-border-radius: 999px;
}
.tabs-demo-vertical {
display: grid;
grid-template-columns: 150px minmax(0, 1fr);
align-items: start;
gap: 1rem;
}
.tabs-demo-vertical > .tabs-demo-content { margin-top: 0; }
@media (max-width: 575.98px) {
.tabs-demo-vertical { grid-template-columns: minmax(0, 1fr); }
}
.tabs-demo-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; margin-bottom: 1rem; }
.tabs-demo-status { margin-top: 1rem; }
.tabs-demo-log { max-width: 100%; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 0.85rem; }
data-slide включает индикатор наведения и активной вкладки. Геометрия обновляется при переключении и изменении ширины.
День: содержимое самостоятельной панели.
Неделя: содержимое самостоятельной панели.
Месяц: содержимое самостоятельной панели.
Показать код
<div class="tabs-demo" id="tabs-slider-demo">
<div class="vg-tabs tabs-demo-custom" data-slide="true">
<div class="vg-tabs-panel" role="tablist" aria-label="Разделы примера">
<div class="vg-tabs-item"><button type="button" class="vg-tabs-link active" id="tabs-slider-0-tab" data-vg-toggle="tab" data-vg-target="#tabs-slider-0" aria-controls="tabs-slider-0">День</button></div>
<div class="vg-tabs-item"><button type="button" class="vg-tabs-link" id="tabs-slider-1-tab" data-vg-toggle="tab" data-vg-target="#tabs-slider-1" aria-controls="tabs-slider-1">Неделя</button></div>
<div class="vg-tabs-item"><button type="button" class="vg-tabs-link" id="tabs-slider-2-tab" data-vg-toggle="tab" data-vg-target="#tabs-slider-2" aria-controls="tabs-slider-2">Месяц</button></div>
</div>
</div>
<div class="vg-tabs-content tabs-demo-content">
<div class="vg-tabs-pane show active" id="tabs-slider-0" tabindex="0">День: содержимое самостоятельной панели.</div>
<div class="vg-tabs-pane" id="tabs-slider-1" tabindex="0">Неделя: содержимое самостоятельной панели.</div>
<div class="vg-tabs-pane" id="tabs-slider-2" tabindex="0">Месяц: содержимое самостоятельной панели.</div>
</div>
</div>
/**
* Описание: декларативный пример VGTabs.
* Возможности: автоматическая обработка вкладок через Data API.
*/
// Дополнительная инициализация не требуется: используется Data API.
/* Токены OKAUX в демо настроены с префиксом vg; состояние темы общее. */
.tabs-demo { min-width: 0; }
.tabs-demo-content {
margin-top: 1rem;
padding: 1rem;
border: 1px solid var(--vg-border-default);
border-radius: var(--vg-radius-md);
background: var(--vg-bg-secondary);
overflow-wrap: anywhere;
}
.tabs-demo-custom {
--vg-tabs-panel-gap: 0.35rem;
--vg-tabs-link-padding-x: 0.75rem;
--vg-tabs-slider-border-radius: 999px;
--vg-tabs-track-slider-border-radius: 999px;
}
.tabs-demo-vertical {
display: grid;
grid-template-columns: 150px minmax(0, 1fr);
align-items: start;
gap: 1rem;
}
.tabs-demo-vertical > .tabs-demo-content { margin-top: 0; }
@media (max-width: 575.98px) {
.tabs-demo-vertical { grid-template-columns: minmax(0, 1fr); }
}
.tabs-demo-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; margin-bottom: 1rem; }
.tabs-demo-status { margin-top: 1rem; }
.tabs-demo-log { max-width: 100%; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 0.85rem; }