Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Horizontal Nav Bar
We can add the horizontal
prop to make the bottom nav text show beside the icon instead of below it:
<template>
<v-container>
<v-row class="text-center">
<v-col col="12">
<v-bottom-navigation :value="activeBtn" color="purple lighten-1" horizontal>
<v-btn>
<span>History</span>
<v-icon>mdi-history</v-icon>
</v-btn>
<v-btn>
<span>Favorites</span>
<v-icon>mdi-heart</v-icon>
</v-btn>
<v-btn>
<span>Map</span>
<v-icon>mdi-map-marker</v-icon>
</v-btn>
</v-bottom-navigation>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
activeBtn: undefined,
}),
};
</script>
Shift
The shift
prop lets us hide the button text until it’s active.
The v-btn
text in the bar should be wrapped with a span
tag.
For instance, we can write:
<template>
<v-container>
<v-row class="text-center">
<v-col col="12">
<v-bottom-navigation :value="activeBtn" color="purple lighten-1" shift>
<v-btn>
<span>History</span>
<v-icon>mdi-history</v-icon>
</v-btn>
<v-btn>
<span>Favorites</span>
<v-icon>mdi-heart</v-icon>
</v-btn>
<v-btn>
<span>Map</span>
<v-icon>mdi-map-marker</v-icon>
</v-btn>
</v-bottom-navigation>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
activeBtn: undefined,
}),
};
</script>
We just add a shift
prop to make the text show only when an icon is clicked.
Toggle
The display state of the v-bottom-navigation
can be toggled with the input-value
prop.
For example, we can write:
<template>
<v-container>
<v-row class="text-center">
<v-col col="12">
<div class="overflow-hidden">
<div class="text-center mb-2">
<v-btn text color="deep-purple" @click="showNav = !showNav">Toggle Nav</v-btn>
</div>
<v-bottom-navigation :value="activeBtn" color="purple lighten-1" :input-value="showNav">
<v-btn>
<span>History</span>
<v-icon>mdi-history</v-icon>
</v-btn>
<v-btn>
<span>Favorites</span>
<v-icon>mdi-heart</v-icon>
</v-btn>
<v-btn>
<span>Map</span>
<v-icon>mdi-map-marker</v-icon>
</v-btn>
</v-bottom-navigation>
</div>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
activeBtn: undefined,
showNav: false,
}),
};
</script>
We added a v-btn
to toggle the nav.
When showNav
is true
then it’s shown.
Otherwise, it’s hidden.
We set the input-value
to show the nav.
Hide on Scroll
We can show the v-bottom-navigation
only when the target element is scrolled.
To do that, we add the hide-on-scroll
prop with the scroll-target
prop set to the selector of them item we’re scrolling.
For example, we can write:
<template>
<v-container>
<v-row class="text-center">
<v-col col="12">
<v-card class="overflow-hidden mx-auto" height="200" max-width="500">
<v-bottom-navigation scroll-target="#scroll-area" hide-on-scroll absolute horizontal>
<v-btn text color="deep-purple accent-4">
<span>History</span>
<v-icon>mdi-history</v-icon>
</v-btn>
<v-btn text color="deep-purple accent-4">
<span>Favorites</span>
<v-icon>mdi-heart</v-icon>
</v-btn>
<v-btn text color="deep-purple accent-4">
<span>Map</span>
<v-icon>mdi-map-marker</v-icon>
</v-btn>
</v-bottom-navigation>
<v-sheet id="scroll-area" class="overflow-y-auto" max-height="600">
<v-container style="height: 1500px;"></v-container>
</v-sheet>
</v-card>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
activeBtn: undefined,
showNav: false,
}),
};
</script>
The scroll-target
is added to the v-bottom-navigation
component.
hide-on-scroll
makes it hide on scroll.
Conclusion
We can make the bottom nav bar behave the way we want with Vuetify.