В библиотеке Quasar вкладки реализуются с помощью
компонента <q-tabs> и тесно связанного с ним
<q-tab> для отдельных элементов и
<q-tab-panels> с <q-tab-panel> для
контента. Правильное использование вкладок обеспечивает
структурированное отображение информации и удобную навигацию по
интерфейсу.
Горизонтальные вкладки по умолчанию располагаются сверху контейнера. Основные компоненты для реализации:
<q-tabs v-model="tab" dense align="justify" class="text-teal">
<q-tab name="home" label="Главная" icon="home" />
<q-tab name="profile" label="Профиль" icon="person" />
<q-tab name="settings" label="Настройки" icon="settings" />
</q-tabs>
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="home">
Контент вкладки Главная
</q-tab-panel>
<q-tab-panel name="profile">
Контент вкладки Профиль
</q-tab-panel>
<q-tab-panel name="settings">
Контент вкладки Настройки
</q-tab-panel>
</q-tab-panels>
Ключевые параметры:
v-model="tab" – связывает активную вкладку с переменной
состояния.dense – уменьшает отступы, делая вкладки
компактнее.align="justify" – равномерно распределяет вкладки по
ширине контейнера.animated – добавляет плавную анимацию при переключении
между вкладками.Горизонтальные вкладки хорошо подходят для верхней панели навигации или для разделов, где количество вкладок ограничено и их легко уместить по ширине.
Для вертикального расположения используется свойство
vertical у компонента <q-tabs>. Это
позволяет разместить вкладки слева или справа от контента.
<div class="row">
<q-tabs
v-model="tab"
vertical
class="col-auto"
dense
align="left"
>
<q-tab name="dashboard" label="Панель" icon="dashboard" />
<q-tab name="reports" label="Отчёты" icon="assessment" />
<q-tab name="users" label="Пользователи" icon="group" />
</q-tabs>
<q-tab-panels v-model="tab" animated class="col">
<q-tab-panel name="dashboard">
Контент панели Панель
</q-tab-panel>
<q-tab-panel name="reports">
Контент панели Отчёты
</q-tab-panel>
<q-tab-panel name="users">
Контент панели Пользователи
</q-tab-panel>
</q-tab-panels>
</div>
Особенности вертикальных вкладок:
vertical – делает ориентацию вертикальной.row), где
вкладки занимают col-auto, а контент — оставшуюся часть
(col).Quasar предоставляет мощные возможности кастомизации через CSS-классы и встроенные параметры:
text-color и indicator-color – позволяют
задать цвет текста и индикатора активной вкладки.dense и inline-label – управляют
компактностью и расположением текста относительно иконок.scrollable – делает вкладки прокручиваемыми, если они
не помещаются на экране.class="bg-primary text-white" – позволяет комбинировать
цвета фона и текста для вкладок.Пример кастомной горизонтальной вкладки:
<q-tabs
v-model="tab"
class="bg-primary text-white"
indicator-color="yellow"
align="justify"
dense
>
<q-tab name="first" label="Первая" />
<q-tab name="second" label="Вторая" />
<q-tab name="third" label="Третья" />
</q-tabs>
Quasar поддерживает создание вкладок на основе массива данных, что полезно при генерации контента из API или базы данных.
<q-tabs v-model="tab">
<q-tab
v-for="item in tabs"
:key="item.name"
:name="item.name"
:label="item.label"
:icon="item.icon"
/>
</q-tabs>
<q-tab-panels v-model="tab" animated>
<q-tab-panel
v-for="item in tabs"
:key="item.name"
:name="item.name"
>
{{ item.content }}
</q-tab-panel>
</q-tab-panels>
export default {
data() {
return {
tab: 'home',
tabs: [
{ name: 'home', label: 'Главная', icon: 'home', content: 'Контент Главная' },
{ name: 'profile', label: 'Профиль', icon: 'person', content: 'Контент Профиль' },
{ name: 'settings', label: 'Настройки', icon: 'settings', content: 'Контент Настройки' },
]
}
}
}
Такой подход повышает гибкость интерфейса и облегчает поддержку большого числа вкладок.
Компонент <q-tab-panels> поддерживает различные
эффекты перехода через атрибут animated и настройку вида
анимации через CSS:
animated – включает плавное изменение контента.<transition> или CSS-классы.v-model, чтобы иметь доступ
к состоянию выбранной вкладки в коде.dense, scrollable и кастомные
цвета для улучшения UX на мобильных устройствах и при ограниченном
пространстве.Гибкость Quasar позволяет комбинировать горизонтальные и вертикальные вкладки в рамках одного интерфейса, создавая сложные и удобные панели навигации без потери производительности и читаемости кода.