导航菜单下拉组件hover显示异常问题求助(附完整代码)
修复导航下拉菜单Hover不显示的问题
问题根源
你代码里控制下拉菜单显示的CSS选择器逻辑错误,原代码中的:
.dropdown:hover, .dropdown-content { display: block; }
逗号分隔的是两个独立选择器,意味着.dropdown-content会被强制一直显示(覆盖了之前的display:none),但实际需求是鼠标悬停在.dropdown上时,它的子元素.dropdown-content才显示,必须将逗号改为空格,使用后代选择器。
修复步骤
- 修正下拉触发的核心规则
把上述错误代码替换为:
.dropdown:hover .dropdown-content { display: block; }
- 优化下拉菜单的位置与hover区域
原代码中.dropdown的padding:0和父元素li的padding:13px冲突,同时.dropbtn的额外内边距会导致hover区域断裂,调整如下:
/* 让dropdown继承父li的padding,保证hover区域连贯 */ .dropdown { padding: inherit; margin:0; box-sizing:border-box; position:relative; } /* 移除dropbtn多余的上下padding,避免和父元素padding重复 */ .dropbtn { display:inline-block; color:white; padding-right:13px; text-decoration: none; }
- 统一导航项的hover样式
原代码中普通导航项和dropdown的hover样式不一致,统一后视觉更协调:
/* 替换原来的.content li a:hover */ .content li:hover a { background:#e6e6e6; color:#000; padding-top:24.5px; padding-bottom:24.5px; } /* 确保dropdown hover时的文本颜色同步变化 */ .dropdown:hover .dropbtn { color:#000; }
修复后的完整下拉菜单CSS代码
/* dropdown menu */ .dropbtn { display:inline-block; color:white; padding-right:13px; text-decoration: none; } li.dropdown { display: inline-block; } .dropdown { padding: inherit; margin:0; box-sizing:border-box; position:relative; } .dropdown-content { margin-top:8px; 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; } .dropdown-content a { color: blue; padding:13px; text-decoration: none; display: block; text-align: left; } .dropdown:hover { background:#e6e6e6; } .dropdown:hover .dropbtn { color:#000; } .dropdown-content a:hover { background-color: #f1f1f1; } .dropdown:hover .dropdown-content { display: block; }
修改完成后,鼠标悬停在Services选项上时,下拉菜单会正常展开,且所有导航项的hover样式保持统一,交互体验更流畅。
内容的提问来源于stack exchange,提问作者Freebird
相关产品推荐
相关产品推荐

