Vue.js 3.0 Tutorial
Vue.js 3.0 Component Advanced
Vue.js 3.0 Transitions & Animations
Vue.js 3.0 Reusable & Combinable
Vue.js 3.0 Advanced
Vue.js 3.0 Tools
Vue.js 3.0 Scale
Vue.js 3.0 Accessibility
Vue.js 3.0 Migrating from Vue2
Vue.js 3.0 Contribute Documentation
Vue.js 3.0 API References
Vue.js 3.0 Style Guide
In Vue.js, it is easy to bind classes and styles to HTML elements. This allows you to dynamically change the appearance of your components based on the component's data.
Let's explore the use of both v-bind:style
and v-bind:class
in Vue.js 3.0.
1. Class Binding
You can bind classes to an HTML element with the v-bind:class
directive. Here's an example where the button's class changes depending on the value of isActive
:
<template> <div> <button v-bind:class="{ active: isActive }">Button</button> </div> </template> <script> export default { data() { return { isActive: true, }; }, } </script> <style scoped> .active { color: white; background-color: blue; } </style>
In the above example, the active
class will be applied to the button when isActive
is true
, and removed when isActive
is false
.
2. Style Binding
You can bind inline styles to an HTML element with the v-bind:style
directive. Here's an example:
<template> <div> <button v-bind:style="{ color: textColor, backgroundColor: backgroundColor }"> Button </button> </div> </template> <script> export default { data() { return { textColor: 'white', backgroundColor: 'blue', }; }, } </script>
In the above example, the color
and backgroundColor
styles of the button will be bound to textColor
and backgroundColor
, respectively. This means that when you change the value of textColor
or backgroundColor
in your component's data, the appearance of the button will change accordingly.
3. Array Syntax
When you need to apply multiple classes or a mix of static and dynamic classes, you can use array syntax:
<template> <div> <button v-bind:class="['btn', { 'btn-active': isActive }]"> Button </button> </div> </template> <script> export default { data() { return { isActive: true, }; }, } </script> <style scoped> .btn { padding: 10px; border: none; cursor: pointer; } .btn-active { color: white; background-color: blue; } </style>
In the above example, the btn
class is always applied, and the btn-active
class is applied only when isActive
is true
.
With class and style binding in Vue.js, you have a powerful way to make your components dynamic and responsive to changes in your component's data.
Vue 3.0 Dynamic Class and Style Binding:
<!-- DynamicClassStyleBinding.vue --> <template> <div :class="{ active: isActive }" :style="{ color: textColor }"> Dynamic Class and Style Binding </div> </template> <script> import { ref } from 'vue'; export default { setup() { const isActive = ref(true); const textColor = ref('blue'); return { isActive, textColor, }; }, }; </script>
Vue 3.0 Conditional Class Binding:
<!-- ConditionalClassBinding.vue --> <template> <div :class="{ active: isActive, 'text-danger': isError }"> Conditional Class Binding </div> </template> <script> import { ref } from 'vue'; export default { setup() { const isActive = ref(true); const isError = ref(false); return { isActive, isError, }; }, }; </script>
Vue 3.0 Style Binding in Components:
<!-- StyleBindingInComponents.vue --> <template> <custom-component :style="{ fontSize: '16px', fontWeight: 'bold' }"> Style Binding in Components </custom-component> </template> <script> import CustomComponent from './CustomComponent.vue'; export default { components: { CustomComponent, }, }; </script>
<!-- CustomComponent.vue --> <template> <div> <slot></slot> </div> </template> <script> export default {}; </script> <style scoped> /* Styles specific to the component */ </style>
Vue 3.0 Class and Style Binding Examples:
<!-- ClassStyleBindingExamples.vue --> <template> <div :class="{ active: isActive }" :style="{ color: textColor, fontSize: '16px' }"> Class and Style Binding Examples </div> </template> <script> import { ref } from 'vue'; export default { setup() { const isActive = ref(true); const textColor = ref('blue'); return { isActive, textColor, }; }, }; </script>
Vue 3.0 Class Binding with Computed Properties:
<!-- ClassBindingComputed.vue --> <template> <div :class="computedClasses"> Class Binding with Computed Properties </div> </template> <script> import { ref, computed } from 'vue'; export default { setup() { const isActive = ref(true); const isError = ref(false); const computedClasses = computed(() => { return { active: isActive.value, 'text-danger': isError.value, }; }); return { computedClasses, }; }, }; </script>
Vue 3.0 Dynamic Style Binding using v-bind:
v-bind
in Vue 3.0.<!-- DynamicStyleBinding.vue --> <template> <div v-bind:style="dynamicStyles"> Dynamic Style Binding using v-bind </div> </template> <script> import { ref } from 'vue'; export default { setup() { const dynamicStyles = ref({ color: 'blue', fontSize: '16px', }); return { dynamicStyles, }; }, }; </script>
Vue 3.0 Binding Classes Conditionally:
<!-- BindingClassesConditionally.vue --> <template> <div :class="{ active: isActive, 'text-danger': isError }"> Binding Classes Conditionally </div> </template> <script> import { ref } from 'vue'; export default { setup() { const isActive = ref(true); const isError = ref(false); return { isActive, isError, }; }, }; </script>