v-if、v-show、display: none、visibility: hidden区别

区别

指令/属性 行为本质 是否占据空间 DOM 状态 事件响应
v-if 条件为 false 时销毁 DOM 元素,条件为 true 时重新创建 ❌ 不占据 元素从 DOM 移除 ❌ 无
v-show 通过 CSS display: none 切换显示/隐藏 ❌ 不占据 元素保留在 DOM ❌ 无
display: none 元素完全隐藏且不占据空间,但仍存在于 DOM 中 ❌ 不占据 元素保留在 DOM ❌ 无
visibility: hidden 元素不可见但保留布局空间,仍存在于 DOM 中 ✅ 占据 元素保留在 DOM ✅ 有

使用场景

需求 推荐方案 原因
条件不频繁变化 v-if 或 display: none 减少初始 DOM 节点,节省资源
条件频繁切换 v-show 避免重复渲染 DOM,切换更流畅
保留布局空间 visibility: hidden 隐藏元素但保留空间,避免布局抖动
需要事件穿透 visibility: hidden + 事件监听 元素不可见但可交互(需额外处理事件逻辑)

v-if 和 display: none 在"隐藏且不占据空间"的行为上相似,但 v-if 更彻底(销毁 DOM)。

v-show 实际使用 display: none,与 visibility: hidden 无关。

根据具体场景(是否频繁切换、是否需要保留空间)选择合适的方案,而非简单等价对应

相关推荐
小码哥_常1 天前
告别onActivityResult!Android数据回传的3大痛点与终极解决方案
前端
hhcccchh1 天前
1.2 CSS 基础选择器、盒模型、flex 布局、grid 布局
前端·css·css3
修己xj1 天前
Markdown 里写公式,别只知道 LaTeX!试试 HTML 标签,简单到飞起
html
专吃海绵宝宝菠萝屋的派大星1 天前
使用Dify对接自己开发的mcp
java·服务器·前端
爱分享的阿Q1 天前
Rust加WebAssembly前端性能革命实践指南
前端·rust·wasm
蓝黑20201 天前
Vue的 value=“1“ 和 :value=“1“ 有什么区别
前端·javascript·vue
小李子呢02111 天前
前端八股6---v-model双向绑定
前端·javascript·算法
He少年1 天前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
史迪仔01121 天前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
AI_Claude_code1 天前
ZLibrary访问困境方案四:利用Cloudflare Workers等边缘计算实现访问
javascript·人工智能·爬虫·python·网络爬虫·边缘计算·爬山算法