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

响应式菜单故障求助:桌面端按钮未隐藏且导航显示异常

响应式菜单问题修复方案

你的代码存在以下几个核心问题:

  • JS逻辑中的类名与HTML元素实际类名不匹配
  • 未在桌面端默认隐藏响应式按钮
  • 媒体查询中的导航隐藏规则有误
  • 下拉菜单的HTML结构不规范导致hover效果异常

修复后的完整代码

HTML 部分

<div class="header">
  <a id="txt" hidden></a>
  <img src="https://i.ibb.co/6Nkbdb3/dlhemenu-1-1-1.png" class="logo" title="logo webstránky MENU - www.menu-web.eu" alt="MENU logo" width="150" height="50" onClick="window.location.reload();"> &nbsp
  <!-- 修复下拉菜单结构:将dropbtn放入dropdown容器内 -->
  <div class="dropdown">
    <a class="dropbtn"><i class="fa fa-user">&nbsp</i>test<?php echo $_SESSION['meno']; ?> 
      <i class="fa fa-caret-down"></i>
    </a>
    <div class="dropdown-content">
      <a href="ucet.php">Môj účet</a>
      <a href="logout.php">Odhlásiť sa</a>
    </div>
  </div>

  <div class="header-right" id="myTopnav">
    <a class="active" href="/welcome.php">Úvodné menu</a>
    <a href="/online.php">Online hodiny</a>
    <a href="/du.php">Domáce úlohy</a>
    <a href="webcentrum/znamky">Známky</a>
    <a href="/rozvrh.php">Rozvrh hodín</a>
    <a href="/ospravedlnenky.php">Ospravedlnenky</a>
    <a href="/ucenie.php">Učebný materiál</a>
    <a href="javascript:void(0);" class="icon" onclick="myFunction()">
      <i class="fa fa-bars"></i>
    </a>
  </div>
</div>

CSS 部分

/* 下拉菜单基础样式 */
.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  font-family: inherit;
  margin: 0;
}

.header {
  overflow: hidden;
  background-color: orange;
  padding: 20px 10px;
}

.header a {
  float: left;
  color: white;
  text-align: center;
  padding: 12px;
  text-decoration: none;
  font-size: 18px;
  line-height: 25px;
  border-radius: 4px;
}

.header a.logo {
  font-size: 25px;
  font-weight: bold;
}

.header a:hover {
  background-color: #ddd;
  color: black;
}

.header a.active {
  background-color: red;
  color: white;
}

.header-right {
  float: right;
}

/* 默认隐藏响应式按钮(桌面端) */
.header-right .icon {
  display: none;
}

/* 移动端适配(最大宽度600px) */
@media screen and (max-width: 600px) {
  /* 隐藏除响应式按钮外的所有导航链接 */
  .header-right a:not(.icon) {
    display: none;
  }
  /* 显示响应式按钮 */
  .header-right a.icon {
    float: right;
    display: block;
  }
  /* 响应式状态下的导航布局 */
  .header-right.responsive {
    position: relative;
    float: none;
    width: 100%;
  }
  .header-right.responsive .icon {
    position: absolute;
    right: 10px;
    top: 0;
  }
  .header-right.responsive a {
    float: none;
    display: block;
    text-align: left;
  }
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  top: 65px;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropdown:hover .dropdown-content {
  display: block;
}

JS 部分

function myFunction() {
  var x = document.getElementById("myTopnav");
  // 匹配元素实际的类名header-right,而非topnav
  if (x.className === "header-right") {
    x.className += " responsive";
  } else {
    x.className = "header-right";
  }
}

关键修改说明

  1. JS类名修正:原代码中判断的topnav类不存在于HTML元素中,改为实际的header-right,确保切换逻辑生效。
  2. 桌面端按钮隐藏:添加默认样式.header-right .icon { display: none; },确保桌面端不显示响应式按钮。
  3. 移动端导航隐藏规则:将原a:not(:first-child)改为a:not(.icon),精准隐藏所有导航链接,只保留响应式按钮。
  4. 下拉菜单结构修复:将dropbtn放入dropdown容器内,确保hover触发下拉菜单的逻辑正常工作。
  5. 响应式状态布局优化:调整.header-right.responsive的浮动和宽度,确保移动端展开后导航占满全屏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:20:17