Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Menu Custom Transitions
Custom transitions can be added to menus.
Vuetify comes with 3 standard transitions, which are scale
, slide-x
and slide-y
.
For example, we can write:
<template>
<v-row justify="space-around">
<v-menu bottom origin="center center" transition="scale-transition">
<template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">Scale Transition</v-btn>
</template>
<v-list>
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-row>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{ title: "Click Me" },
{ title: "Click Me 2" },
{ title: "Click Me 3" },
],
}),
};
</script>
We have the transition
prop to set the transition effect.
The on
object is passed in as the value of v-on
.
This lets us listen to events for the menu.
And attrs
are props that we passed into v-bind
so that we can set the props to show the menu.
The other choices for the transition
prop are slide-x-transition
and slide-y-transition
.
Disabled Menu
We can disable the menu with the disabled
prop.
For example, we can write:
<template>
<v-row justify="space-around">
<v-menu bottom origin="center center" transition="scale-transition" disabled>
<template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">Menu</v-btn>
</template>
<v-list>
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-row>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{ title: "Click Me" },
{ title: "Click Me 2" },
{ title: "Click Me 3" },
],
}),
};
</script>
then the button won’t open the menu.
X Offset
We can move the menu horizontally to make the activator visible.
For example, we can write:
<template>
<v-row justify="space-around">
<v-col cols="12">
<v-menu bottom origin="center center" transition="scale-transition" offset-x>
<template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">Menu</v-btn>
</template>
<v-list>
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-col>
</v-row>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{ title: "Click Me" },
{ title: "Click Me 2" },
{ title: "Click Me 3" },
],
}),
};
</script>
We move the menu to the right of the button with the offset-x
prop.
Y Offset
Similarly, we can move the menu vertically.
For example, we can write:
<template>
<v-row justify="space-around">
<v-col cols="12">
<v-menu bottom origin="center center" transition="scale-transition" offset-y>
<template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">Menu</v-btn>
</template>
<v-list>
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-col>
</v-row>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{ title: "Click Me" },
{ title: "Click Me 2" },
{ title: "Click Me 3" },
],
}),
};
</script>
to move the menu above the menu button.
Conclusion
We can add menus with different transitions and positions.