Web前端之隐藏元素方式的区别、Vue循环标签的时候在同一标签上隐藏元素的解决办法、hidden、display、visibility

📅 发布时间:2026/7/7 23:14:25 👁️ 浏览次数:
Web前端之隐藏元素方式的区别、Vue循环标签的时候在同一标签上隐藏元素的解决办法、hidden、display、visibility
MENU标签区别速览详解✅ v-if✅ v-show✅ :style{ display: ... }⚠️ :hidden⚠️ :style{ visibility: ... }总结标签divv-foritem in listv-ifitem.isShow{{item.name}}/divdivv-foritem in listv-showitem.isShow{{item.name}}/divdivv-foritem in list:style{ display: item.isShow? : none }{{item.name}}/divdivv-foritem in list:hidden!item.isShow{{item.name}}/divdivv-foritem in list:style{ visibility: item.isShow? visible : hidden }{{item.name}}/div区别速览序号写法渲染到DOM占位响应性性能推荐指数说明1v-if❌ 不渲染❌ 不占位高增删低频繁销毁/重建⚠️ 低每个item.isShowfalse的元素根本不会出现在DOM中适合频繁切换不推荐2v-show✅ 渲染❌ 不占位高高仅切换 CSS✅ 高DOM始终存在只是通过display: none切换可用于频繁切换可见性3:style“display”✅ 渲染❌ 不占位高高✅ 高和v-show本质一致更灵活可配合过渡/动画4:hidden✅ 渲染❌ 不占位某些浏览器中兼容性一般高⚠️ 中HTML原生hidden属性有兼容性差异如 IE不推荐用于复杂布局5:style“visibility”✅ 渲染✅ 占位高高⚠️ 中偏低元素不可见但仍然占空间适合需要保留布局占位但不显示内容的场景详解✅ v-ifdivv-foritem in listv-ifitem.isShow{{item.name}}/div逻辑层判断如果isShowfalse就不渲染该DOM元素。Vue编译优化Vue在每次更新时会销毁/创建DOM节点。性能影响对于频繁切换的列表v-if性能较差会频繁插入/删除DOM。作用域问题v-if的判断发生在v-for外层Vue官方建议避免同标签同时使用v-if与v-for会导致作用域错乱应放在template上。✅适合只渲染一次或很少改变显示状态的内容如首次加载/权限判断✅ v-showdivv-foritem in listv-showitem.isShow{{item.name}}/divDOM元素始终存在Vue只是动态加上或移除display: none更新快性能好。✅适合需要频繁切换显示状态的场景如切换tab、展开折叠✅ :style“{ display: … }”divv-foritem in list:style{ display: item.isShow ? : none }{{item.name}}/div与v-show类似控制的是CSS显示状态更灵活可绑定多个样式也可使用动画库或写自定义transition适合在v-for这种循环内做粒度更细的控制。✅推荐用法兼顾灵活性与性能⚠️ :hiddendivv-foritem in list:hidden!item.isShow{{item.name}}/div控制HTML的hidden属性布尔值行为接近display: none某些老浏览器如IE、旧版Edge对hidden支持不好不能做动画CSS控制也较差。⚠️不推荐在复杂布局中使用简单项目可用⚠️ :style“{ visibility: … }”divv-foritem in list:style{ visibility: item.isShow ? visible : hidden }{{item.name}}/divDOM始终存在元素隐藏但仍然占据空间对布局有影响可以搭配opacity做过渡动画。✅适合希望“保留位置”但临时不显示的内容例如横向滚动条下的轮播项、等高栅格系统。总结场景推荐方式静态控制显示页面首次加载是否渲染v-if频繁切换可见性如 tab 切换v-show或:style“display”需要控制多个样式或结合动画:style更灵活只想快速隐藏并支持原生 hidden 属性:hidden轻量项目可用需要隐藏但保留占位visibility: hidden如果在表格、网格、动态列表等复杂场景中使用推荐优先考虑1、:style{ display: item.isShow ? : none }通用又安全2、或v-show只在v-for的子元素中使用