Sometimes it is required to control the flow of the CSS classes and style properties of the element based on the expression at runtime.
In Vue.js there is a v-bind directive to update the HTML attribute.
In this tutorial, I am using this on class v-bind:class and style v-bind:style.
The v-bind:class adds and removes classes from the elements without affecting the value of the class attribute.
In the demonstration, I am using the v-bind directive to dynamically toggle CSS class and style property from the element on a click.

Contents
1. Download and Include
- Download Vue.js library from here or you can use CDN. Include the
<script >in<head>section.
<script src='https://cdn.jsdelivr.net/npm/vue'></script>
2. HTML
Create two <div> in the <div id='myapp'>.
On the <div class='div'> add v-bind:class and define @click event which calls toggleClass() method.
In the second <div> I use @click='isActive = !isActive'.
In the v-bind:class I am using Array syntax to toggle class according to the isActive value using trinary operator.
The value of isActive is managed from the <script >.
Completed Code
<div id='myapp'> <!-- div 1 --> <div class='div' v-bind:class="[isActive ? 'red' : 'blue']" @click="toggleClass()"></div> <!-- div 2 --> <div class='div' v-bind:class="[isActive ? 'blue' : 'red']" @click="isActive = !isActive"></div> </div>
3. CSS
Here, is the CSS classes that I used above.
.red{
background: red;
}
.blue{
background: blue;
}
.div{
width: 100px;
height: 100px;
display: inline-block;
border: 1px solid black;
}
4. Script
Create an instance of Vue where define a single variable isActive: true in data option.
Define a method toggleClass().
This method call from the <div class='div'> on click.
From this method update isActive value. If it is true then assign false otherwise true.
Completed Code
var app = new Vue({
el: '#myapp',
data: {
isActive: true
},
methods: {
toggleClass: function(event){
this.isActive = !this.isActive;
}
}
})
5. Demo
6. v-bind:style
You can use v-bind:style to toggle only CSS property in the style attribute instead of a class.
Syntax –
v-bind:style='{property-name: expression,...}'
In the example, create two <div > where define v-bind:style to set background-color property according to isActive value.
The script is same as the above example only change the el: "#app2".
Completed Code
<div id='app2'>
<!-- div 1 -->
<div class='div' v-bind:style='{"background-color" : (isActive? "orange" : "yellow" )}' @click="toggleClass()"></div>
<!-- div 2 -->
<div class='div' v-bind:style='{"background-color": (isActive? "yellow" : "orange" )}' @click="isActive = !isActive"></div>;
</div>
<!-- Script -->
<script>
var app = new Vue({
el: '#app2',
data: {
isActive: true
},
methods: {
toggleClass: function(){
this.isActive = !this.isActive;
}
}
})
</script>
7. Conclusion
Use trinary operator in the v-bind:class to toggle CSS class on the element.
If you only want to toggle values of some CSS properties according to expression then you can use v-bind:style.