How to create the transitions in Vue
In this tutorial, we are going to learn about Transitions in vuejs with the help of examples.
transition component
Vue provides us a <transition>
wrapper component which helps us to apply transitions to html elements
whenever an element is added or removed from the dom.
In <transition>
component we need to add an attribute called name
.
name: The name of the transition CSS class.
whenever we added a name
to our transition component vuejs gives us different css classes prefixed with name
.
*
represents the name of yourtransition
class.
*-enter : Initial state, this class is added one frame before our element is inserted, removed one frame after the element is inserted.
*-enter-active: This class is Applied during the entering phase. Added before an element is inserted, removed when transition/animation finishes. This class can be used to define the duration, delay and easing curve for the entering transition.
-enter-to: Ending state for *-enter
class. Added one frame after the element is inserted (at the same time-enter is removed), removed when transition/animation finishes.
*-leave: Added immediately when an element is leaving from the dom, removed after one frame.
*-leave-active: Active state for leave. Applied during the entire leaving phase. Added immediately when leave transition is triggered, removed when the transition/animation finishes. This class can be used to define the duration, delay and easing curve for the leaving transition.
-leave-to: Ending state for *-leave
class. Added one frame after a leaving transition is triggered (at the same time-leave is removed), removed when the transition/animation finishes.
Example
<template>
<div id="app">
<button @click="show = !show;">Show</button>
<transition name="slide"> <h1 v-if="show">Vue transition</h1>
</transition>
</div>
</template>
<script>
export default {
data: function() {
return {
show: false
};
}
};
</script>
<style>
.slide-enter-active,.slide-leave-active { transition: transform 0.4s ease;}.slide-enter,.slide-leave-to { transform: translateY(-50%);}</style>
In the above example, we wrapped our h1
element with transition
component having name="slide"
.
Inside our style
tags we added four classes.
.slide-enter:This class is applied one frame before our h1
element is added to the dom.
The .slide-enter-active
and .slide-leave-active
classes are applying transitions to our h1
element.
Transitions on Initial render
Sometimes we need to apply a transition to our elements
when a page is Initially rendered into the dom in such cases we need to add a appear
attribute to transition
component.
<template>
<div id="app">
<transition appear name="slide"> <h1>Vue transitions</h1>
</transition>
</div>
</template>
<script>
export default {};
</script>
<style>
.slide-enter-active {
transition: transform 0.4s ease;
}
.slide-enter {
transform: translateY(-50%);
}
</style>
Transitioning List items
For transitioning list items we need to use <transition-group>
component, by default transition-group
wraps our list items with span
tag.
We can change the default
tag by adding the tag
attribute to transition-group
component.
<template>
<div>
<transition-group name="list" tag="ul"> <li v-for="(post, i) in posts" :key="i">{{ post.title }}</li>
</transition-group>
<button @click="addPosts">add posts</button>
</div>
</template>
<script>
export default {
data: function() {
return {
posts: []
};
},
methods: {
addPosts: function() {
this.posts.push({
title: `${Math.floor(Math.random() * 10 + 1)} post`
});
}
}
};
</script>
<style>
.list-enter-active,
.list-leave-active {
transition: all 1s;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateX(-50%);
}
</style>