响应式菜单故障求助:桌面端按钮未隐藏且导航显示异常
响应式菜单问题修复方案
你的代码存在以下几个核心问题:
- 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();">   <!-- 修复下拉菜单结构:将dropbtn放入dropdown容器内 --> <div class="dropdown"> <a class="dropbtn"><i class="fa fa-user"> </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"; } }
关键修改说明
- JS类名修正:原代码中判断的
topnav类不存在于HTML元素中,改为实际的header-right,确保切换逻辑生效。 - 桌面端按钮隐藏:添加默认样式
.header-right .icon { display: none; },确保桌面端不显示响应式按钮。 - 移动端导航隐藏规则:将原
a:not(:first-child)改为a:not(.icon),精准隐藏所有导航链接,只保留响应式按钮。 - 下拉菜单结构修复:将
dropbtn放入dropdown容器内,确保hover触发下拉菜单的逻辑正常工作。 - 响应式状态布局优化:调整
.header-right.responsive的浮动和宽度,确保移动端展开后导航占满全屏。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

