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 无关。

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

相关推荐
IT_陈寒10 分钟前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户9385156350726 分钟前
Type vs Interface:读完这篇就没有面试官能难倒你了
前端·面试·typescript
用户9385156350736 分钟前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
油丶酸萝卜别吃1 小时前
jquery-ajax.js 说明文档
前端·javascript·jquery
windliang1 小时前
Claude Code 源码分析(九):子 Agent 如何分叉、继续与回到父会话
前端·javascript·面试
柒和远方2 小时前
V063: TS 面试必考:interface 与 type 的四大差异,与 LLM Harness 的自动化择优
前端·javascript
半个落月2 小时前
React useRef 详解:DOM 引用、持久化值与 Worker 实例
前端·react.js
阿黎梨梨2 小时前
TypeScript 类型编程:从新手到 Harness 工程实践
前端
黄金决明子2 小时前
Vue3 + Vite 打包后打开空白?
前端
张龙6872 小时前
终端效率翻倍实战:fzf + zoxide + ripgrep + bat 组合拳,告别重复敲命令
前端