You need to enable JavaScript to run this app. hamburger下拉菜单切换后导航栏在大屏端消失的CSS与JS修复问题
优惠活动
大模型
产品
解决方案
定价
更多

hamburger下拉菜单切换后导航栏在大屏端消失的CSS与JS修复问题

问题根源

你直接用JS给导航栏设置了style.display内联样式,CSS内联样式的优先级远高于媒体查询里的类选择器样式,所以当屏幕宽度超过768px时,媒体查询里本来要生效的导航栏显示规则被内联的display: none覆盖了,才会出现导航消失的问题。


方案1:用状态类切换代替直接修改内联样式(最推荐)

所有显示逻辑归CSS统一管理,不需要额外监听窗口变化,维护成本更低。

修改CSS

在原有小屏媒体查询规则里新增导航展开的状态类,同时补全大屏默认显示规则:

/* 大屏默认规则 */
@media screen and (min-width: 769px) {
  .navigation {
    display: block;
  }
}

@media screen and (max-width: 768px) {
  /* 原有代码保留 */
  .header-container {
    padding: 15px;
  }
  .navigation {
    display: none;
  }
  .burger {
    display: block;
  }
  /* 新增小屏下导航展开的专用类 */
  .navigation.mobile-show {
    display: block;
  }
}

修改JS逻辑

把直接修改style.display改为切换状态类:

const burgerBar = document.querySelector('.burger');
const navigation = document.querySelector('.navigation');
const navbarItems = document.querySelector('.navbar-items');
const navbarItem = document.querySelector('.navbar-item');

burgerBar.addEventListener('click', () => {
  navigation.classList.toggle('mobile-show');
})

方案2:兼容现有写法,监听窗口尺寸自动重置样式

如果不想改动现有切换逻辑,可以新增窗口尺寸监听事件,屏幕超过阈值时自动清空内联样式,让CSS媒体查询规则重新接管:

// 原有点击逻辑保留
const burgerBar = document.querySelector('.burger');
const navigation = document.querySelector('.navigation');
const navbarItems = document.querySelector('.navbar-items');
const navbarItem = document.querySelector('.navbar-item');

burgerBar.addEventListener('click', () => {
  if (navigation.style.display != 'block') {
    navigation.style.display = 'block'
  } else {
    navigation.style.display = 'none'
  }
})

// 新增窗口resize监听
window.addEventListener('resize', () => {
  if (window.innerWidth > 768) {
    // 清空内联display样式,恢复媒体查询的默认规则
    navigation.style.display = '';
  }
})

内容的提问来源于stack exchange,提问作者Jason Todd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 21:45:03