👁️ Vue v-show – Efficient Visibility Toggle in Vue.js (2025 Guide)
🧲 Introduction – What is v-show
in Vue?
Sometimes, you want to toggle the visibility of an element without adding or removing it from the DOM. Vue’s v-show
directive offers a simple way to do this—by toggling the display
CSS property dynamically based on a condition.
🎯 In this guide, you’ll learn:
- What
v-show
is and how it differs fromv-if
- When and why to use
v-show
- Syntax, use cases, and performance considerations
- Practical examples and code explanations
🔎 What is the v-show
Directive?
The v-show
directive conditionally displays an element based on a Boolean value. Unlike v-if
, it does not remove the element from the DOM—it simply changes its visibility using display: none
.
✅ Basic Syntax:
<p v-show="isVisible">You can see me!</p>
🧠 Explanation:
- If
isVisible
istrue
, the<p>
is shown - If
false
, the element is still in the DOM but hidden
🧪 Example – Toggle Paragraph Display
<template>
<div>
<button @click="toggle">Toggle Paragraph</button>
<p v-show="showText">This is some text.</p>
</div>
</template>
<script>
export default {
data() {
return { showText: true };
},
methods: {
toggle() {
this.showText = !this.showText;
}
}
}
</script>
🔍 What Happens:
- Clicking the button toggles
showText
v-show
adds/removes thedisplay: none
CSS style dynamically
🆚 v-show vs. v-if – Key Differences
Feature | v-show | v-if |
---|---|---|
DOM Handling | Always renders element | Conditionally renders/removes |
Toggle Method | Changes display: none | Adds/removes DOM nodes |
Performance | Faster toggle, less control | Slower toggle, better for logic |
Use Case | Frequently toggled content | Rarely shown/hidden content |
🧠 Rule of Thumb:
- Use
v-show
for performance with frequently toggled elements (like tabs, dropdowns) - Use
v-if
when the element is conditional or heavy
🎨 Styling Impact of v-show
Since the element stays in the DOM, it can:
- Affect page layout (e.g., spacing/margins)
- Be targeted by CSS/JS even when hidden
You may want to combine it with v-bind:class
for more control:
<p v-show="visible" :class="{ 'active': visible }">Status</p>
🧰 Real-World Example – Tabs Component
<template>
<div>
<button @click="activeTab = 'home'">Home</button>
<button @click="activeTab = 'about'">About</button>
<div v-show="activeTab === 'home'">🏠 Home Content</div>
<div v-show="activeTab === 'about'">ℹ️ About Content</div>
</div>
</template>
<script>
export default {
data() {
return { activeTab: 'home' };
}
}
</script>
🧠 Use Case: Fast toggling between tab panels without DOM re-creation.
⚠️ Accessibility Note
Since the element remains in the DOM, screen readers may still access it even if hidden with v-show
. Use aria-hidden="true"
when needed to hide elements semantically.
<p v-show="false" aria-hidden="true">Hidden text</p>
📌 Summary – Recap & Next Steps
The v-show
directive is a lightweight solution for toggling visibility without DOM churn. It’s perfect for performance-sensitive scenarios like switching tabs, toggling panels, or showing modals.
🔍 Key Takeaways:
v-show
toggles element visibility withdisplay: none
- It doesn’t add or remove the DOM node—just hides it
- Great for UI states that toggle frequently
- Use
v-if
for heavy DOM logic or infrequent conditional elements
⚙️ Real-World Relevance:
Used in tab menus, collapsible sections, dropdowns, and performance-optimized UIs where re-rendering must be minimized.
❓ FAQ Section
❓ What does v-show
do in Vue.js?
✅ It conditionally toggles the visibility of an element using display: none
without removing it from the DOM.
❓ When should I use v-show
instead of v-if
?
✅ Use v-show
when you toggle visibility often. v-if
is better for rarely shown elements to save memory and performance.
❓ Does v-show
affect layout?
✅ Yes, because the element is still in the DOM and can occupy space unless hidden with display: none
.
❓ Can I use v-show
with animations?
✅ Vue doesn’t support transitions with v-show
natively, but you can use CSS transitions on the display
property or wrap it in a <transition>
component using visibility
and opacity
.
❓ Is v-show
reactive?
✅ Yes. Like all Vue directives, v-show
responds to reactive data changes and updates the view accordingly.
Share Now :