You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Vue.js中媒体查询无法实现组件的显示与隐藏切换?

问题排查与解决办法

嘿,这个问题我之前也碰到过!核心原因是你在HTML里用了错误的自定义组件写法——自闭合标签在这里行不通。

为啥会出现这种情况?

标准HTML的规则里,只有像<img>、<br>这种原生的“空元素”才能用<xxx />这种自闭合写法。对于我们自己定义的Vue组件(比如main-nav、menu-nav),浏览器的HTML解析器根本不认自闭合标签,它会把<main-nav />当成一个没闭合的<main-nav>标签,后面的<menu-nav />直接被塞进这个未闭合的标签里当子元素了。

最终渲染出来的DOM结构其实是这样的:

<div id="nav-app">
  <main-nav>
    <menu-nav>
      <div id="menu-nav"></div>
    </menu-nav>
  </main-nav>
</div>

你看,当屏幕缩小到840px以下时,你的CSS让#main-nav隐藏了,那它里面的menu-nav自然也跟着被藏起来了,所以你看不到它。

怎么修复?

很简单,把HTML里的自闭合组件标签改成完整的闭合形式就行:

<div id="nav-app">
  <main-nav></main-nav>
  <menu-nav></menu-nav>
</div>

这样浏览器就能正确识别两个独立的组件,媒体查询的CSS也能正常工作——屏幕小于840px时,main-nav隐藏,menu-nav正常显示。

小补充:如果是在Vue单文件组件(.vue)的<template>里,自闭合标签是可以用的,因为Vue自己的模板编译器会正确处理,但在普通HTML文件里直接写就不行啦。


内容的提问来源于stack exchange,提问作者amachree tamunoemi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:11