Компонент v-bottom-navigation предназначен для создания
панели навигации, закреплённой внизу экрана. Он особенно полезен для
мобильных интерфейсов, где важна компактная и интуитивно понятная
навигация. В Vuetify 3 v-bottom-navigation реализует
Material Design спецификации для нижней навигации.
<template>
<v-bottom-navigation
v-model="active"
grow
color="primary"
>
<v-btn value="home" icon>
<v-icon>mdi-home</v-icon>
</v-btn>
<v-btn value="search" icon>
<v-icon>mdi-magnify</v-icon>
</v-btn>
<v-btn value="profile" icon>
<v-icon>mdi-account</v-icon>
</v-btn>
</v-bottom-navigation>
</template>
<script setup>
import { ref } from 'vue'
const active = ref('home')
</script>
Ключевые моменты:
v-model управляет активной кнопкой на навигационной
панели.grow заставляет кнопки равномерно растягиваться
по ширине.color задаёт цвет фона панели.v-btn может содержать иконку через
компонент v-icon.v-bottom-navigation поддерживает два основных режима
отображения:
fixed) Позволяет
панели оставаться видимой при скролле страницы.<v-bottom-navigation
v-model="active"
fixed
>
...
</v-bottom-navigation>
absolute) Панель
располагается поверх контента и может перекрывать элементы.<v-bottom-navigation
v-model="active"
absolute
color="deep-purple accent-4"
>
...
</v-bottom-navigation>
Каждая кнопка может содержать не только иконку, но и подпись. Для
отображения текста используется слот default или атрибут
label.
<v-btn value="favorites" icon>
<v-icon>mdi-heart</v-icon>
<span>Избранное</span>
</v-btn>
Использование v-btn с текстом обеспечивает наглядность и
улучшает UX на мобильных устройствах. Важно, что наличие текста не
мешает работе v-model для определения активного
элемента.
v-bottom-navigation позволяет выделять активный элемент
автоматически через v-model. Активное состояние можно
кастомизировать через CSS-классы или через встроенные свойства.
<v-bottom-navigation
v-model="active"
color="blue lighten-2"
active-class="my-active-class"
>
<v-btn value="dashboard" icon>
<v-icon>mdi-view-dashboard</v-icon>
</v-btn>
</v-bottom-navigation>
<style>
.my-active-class {
background-color: #ffeb3b;
}
</style>
Компонент прекрасно интегрируется с маршрутизатором
vue-router. Для этого в кнопках можно использовать атрибут
to:
<v-bottom-navigation
v-model="active"
color="indigo"
>
<v-btn to="/" value="home" icon>
<v-icon>mdi-home</v-icon>
</v-btn>
<v-btn to="/profile" value="profile" icon>
<v-icon>mdi-account</v-icon>
</v-btn>
</v-bottom-navigation>
Это позволяет кнопкам автоматически изменять активное состояние при смене маршрута и обеспечивать навигацию без ручного контроля состояния.
Для мобильных приложений часто требуется, чтобы нижняя навигация
исчезала при прокрутке контента. В Vuetify это достигается комбинацией
v-bottom-navigation и слота v-scroll.
<v-bottom-navigation
v-model="active"
hide-on-scroll
>
<v-btn value="home" icon>
<v-icon>mdi-home</v-icon>
</v-btn>
</v-bottom-navigation>
hide-on-scroll автоматически скрывает панель при
прокрутке вниз и показывает при прокрутке вверх.
Цвет панели можно задавать как статически через атрибут
color, так и динамически через реактивное состояние:
<v-bottom-navigation
v-model="active"
:color="isDarkTheme ? 'grey darken-4' : 'blue lighten-2'"
>
...
</v-bottom-navigation>
Для кнопок также можно использовать собственные цветовые схемы:
<v-btn value="settings" icon color="red lighten-1">
<v-icon>mdi-cog</v-icon>
</v-btn>
v-fab-transition
позволяет создавать анимированные кнопки действий поверх панели.prepend и
append даёт гибкость для размещения дополнительных
элементов, например, индикаторов уведомлений.value для кнопок, чтобы
корректно работал v-model.grow для равномерного распределения кнопок
на широких экранах.vue-router синхронизировать
v-model с текущим маршрутом для точного выделения активного
элемента.v-bottom-navigation в Vuetify — универсальный инструмент
для реализации нижней навигационной панели, сочетающий адаптивность,
интеграцию с маршрутизатором и широкие возможности кастомизации.
Правильная настройка v-model, цветов, иконок и поведения на
скролле позволяет создавать удобные и современные интерфейсы для
мобильных и веб-приложений.