Reputation: 43
I have a vuetify tab component and I hope to use it as my navigation menu. I want to create a responsive navbar using vuetify. Here is my code. <y requirement is like a normal navbar working .when i open the page in mobile it should hide the menu and show the hamburger menu.
navbar.vue
<template>
<v-card>
<v-toolbar
color="cyan"
dark
flat
>
<v-app-bar-nav-icon></v-app-bar-nav-icon>
enter code here
<v-toolbar-title>Your Dashboard</v-toolbar-title>
<v-spacer></v-spacer>
<v-btn icon>
<v-icon>mdi-magnify</v-icon>
</v-btn>
<v-btn icon>
<v-icon>mdi-dots-vertical</v-icon>
</v-btn>
<template v-slot:extension>
<v-tabs
v-model="tab"
align-with-title
>
<v-tabs-slider color="yellow"></v-tabs-slider>
<v-tab
v-for="item in items"
:key="item"
>
{{ item }}
</v-tab>
</v-tabs>
</template>
</v-toolbar>
<v-tabs-items v-model="tab">
<v-tab-item
v-for="item in items"
:key="item"
>
</v-tab-item>
</v-tabs-items>
</v-card>
</template>
<script>
export default {
el: '#app',
data () {
return {
tab: null,
items: [
'web', 'shopping', 'videos', 'images', 'news',
],
}
}
}
</script>
Upvotes: 3
Views: 11936
Reputation: 6554
You need to make a few changes, instead of the toolbar, use appear. Move your ab contents to section. Please see the full code and link. And then add css to show and hide items based on the size of the screen.
Please see the CP link https://codepen.io/aaha/pen/poyqRxo?editors=1010
<template>
<v-app app>
<v-app-bar app>
<v-app-bar-nav-icon @click="drawer = true"
class="d-flex d-sm-none" //Add this class to show menu icon only on small screen
></v-app-bar-nav-icon>
<v-toolbar-title>Your Dashboard</v-toolbar-title>
<v-spacer></v-spacer>
<v-btn icon>
<v-icon>mdi-magnify</v-icon>
</v-btn>
<v-btn icon>
<v-icon>mdi-dots-vertical</v-icon>
</v-btn>
<template v-slot:extension>
<v-tabs
v-model="tab"
align-with-title
class="d-none d-sm-flex" //Add this class to show tabs only on medium screen and above
>
<v-tabs-slider color="yellow"></v-tabs-slider>
<v-tab
v-for="item in items"
:key="item"
>
{{ item }}
</v-tab>
</v-tabs>
</template>
</v-app-bar>
<!-- Add a navigation bar -->
<v-navigation-drawer
v-model="drawer"
absolute
temporary
>
<v-list
nav
dense
>
<v-list-item-group
>
<v-list-item v-for="(item, index) in items">
<v-list-item-title @click="tab = index">{{ item }}</v-list-item-title>
</v-list-item>
</v-list-item-group>
</v-list>
</v-navigation-drawer>
<!-- Navigation bar ends -->
<v-content class="ma-5">
<v-tabs-items v-model="tab" class="d-flex flex-column align-center">
<v-tab-item
v-for="item in items"
:key="item"
>
You are on {{ item }}
</v-tab-item>
</v-tabs-items>
</v-content>
</v-app>
</template>
<script>
export default {
el: '#app',
data () {
return {
drawer: false,
tab: null,
items: [
'web', 'shopping', 'videos', 'images', 'news',
],
}
}
}
</script>
Upvotes: 8