Read About my Experience on GDG Cloud Event : - Click here to Read !

Vue.js css transitions

a simple and basic guide to use the css transitions using vue.js

blog-thumbnail for vue js Transitions

Vue.js is a popular JavaScript framework for building user interfaces. One of its key features is its ability to handle CSS transitions and animations in a way that is both intuitive and easy to use. In this article, we will explore how to use CSS transitions in Vue.js, including examples of how to create different types of transitions and animations.

To get started with CSS transitions in Vue.js, you'll need to have a basic understanding of Vue.js components and directives. We'll also be using the v-bind directive, which is used to bind data to an element's attributes, and the v-on directive, which is used to attach event listeners to an element.

First, let's take a look at a basic example of a CSS transition in Vue.js. In this example, we have a button that, when clicked, will toggle a class on a div element that will change the div's background color.

     //code_here  
  <template>
  <div>
    <button v-on:click="toggle = !toggle">Toggle</button>
    <div v-bind:class="{ 'red': toggle }"></div>
  </div>
</template>

<style>
  .red {
    background-color: red;
    transition: background-color 0.5s;
  }
</style>

<script>
export default {
  data() {
    return {
      toggle: false
    }
  }
}
</script>

add image 

In this example, we have a button with the v-on:click directive, which is listening for a click event. When the button is clicked, it triggers a change in the toggle data property, which is bound to the class of the div element using the v-bind:class directive.

The div element's class is defined in the CSS as .red, which sets the background color to red. Additionally, we have added a transition property to the .red class, which tells the browser to animate the background color change over a period of 0.5 seconds.

Now that we have a basic understanding of how CSS transitions work in Vue.js, let's take a look at some more advanced examples.

One common use case for CSS transitions is to create a hover effect. In this example, we'll create a button that changes color when the user hovers over it:

   //code_here 
<template>
  <button
    v-bind:class="{ 'hover': hover }"
    v-on:mouseover="hover = true"
    v-on:mouseout="hover = false"
  >Hover me</button>
</template>

<style>
  button {
    color: blue;
    transition: color 0.5s;
  }
  .hover {
    color: red;
  }
</style>

<script>
export default {
  data() {
    return {
      hover: false
    }
  }
}
</script>

add image

In this example, we're using the v-bind:class directive to bind the **hover**data property to the button's class. We're also using the v-on:mouseover and v-on:mouseout directives to listen for mouseover and mouseout events. When the user hovers over the button, the hover property is set to true, which in turn applies the .hover class to the button and changes its color to red. When the user moves the cursor away from the button, the hover property is set to false, which removes the .hover class and changes the button's color back to blue.

Another useful feature of CSS transitions in Vue.js is the ability to use different types of easing functions. Easing functions determine the rate at which an animation progresses, and can be used to create a more natural and realistic look for your animations.

In this example, we'll create a simple animation that scales an image up and down when hovered over. We'll use the ease-in-out easing function to create a smooth and gradual transition:

   //code_here 
  <template>
  <img
    v-bind:src="image"
    v-bind:style="{ transform: 'scale(' + scale + ')' }"
    v-on:mouseover="scale = 1.5"
    v-on:mouseout="scale = 1"
    transition: "transform 0.5s ease-in-out"
  />
</template>

<script>
export default {
  data() {
    return {
      image: '<https://via.placeholder.com/150>',
      scale: 1
    }
  }
}
</script>

In this example, we're using the v-bind:style directive to bind the transform property to the scale data property. We're also using the v-on:mouseover and v-on:mouseout directives to listen for mouseover and mouseout events, and the transition property to animate the transform change with an easing function of ease-in-out over 0.5 seconds.

In addition to the examples above, Vue.js also provides a built-in transition component that can be used to create more complex animations. The transition component allows you to define different transition states and apply different CSS styles to each state.

Here's an example of how to use the transition component to create a slide-in transition for a list of items:

     //code_here 
    <template>
  <transition-group name="slide">
    <li v-for="item in items" :key="item.id">{{ item.text }}</li>
  </transition-group>
</template>

<style>
  .slide-enter-active, .slide-leave-active {
    transition: all 0.5s;
  }
  .slide-enter, .slide-leave-to {
    transform: translateX(-100%);
  }
</style>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    }
  }
}
</script>

output

add image

In this example, we're using the <transition-group> component to create a transition for a list of items. We've added the **name**attribute to the transition-group to specify the transition class name, in this case slide. The <transition-group> component automatically adds the slide-enter-active**,** slide-enter**,** slide-leave-active**, and** slide-leave-to classes to the elements in the list, allowing us to define different styles for each transition state.

In the CSS, we've defined the transform: translateX(-100%) for slide-enter and slide-leave-to class, this means that when an element is added to the list (slide-enter) or removed from the list (slide-leave-to), it will slide in from the left (translateX(-100%)), and when an element is removed from the list (slide-leave-to) it will slide out to the left.

In addition, we've defined the transition: all 0.5s; for slide-enter-active and slide-leave-active classes, this means that all the properties of the element will be transitioned over a period of 0.5 seconds.

In conclusion, CSS transitions and animations in Vue.js are a powerful tool for creating dynamic and engaging user interfaces. With the ability to easily bind data to element attributes, listen for events, and use different easing functions and transition states, it's easy to create a wide variety of animations and effects. Whether you're working on a simple hover effect or a complex animation, Vue.js provides the tools and flexibility you need to create great-looking and engaging user interfaces.

Reference- Offical Vue js Site

Hey! 👋 I’m Pratap, a Frontend Developer with 2+ years of experience crafting digital experiences through code and design. I specialize in frontend web development and UI/UX design, Through this blog…

Post a Comment