导航栏Brass分类悬停时子项无法单独高亮的问题如何解决
问题原因
你现在的写法是给所有层级的li设置了hover背景,而包含Brass的父级li本身就包裹了整个二级子菜单区域,只要鼠标进入这个父li的范围(包括子菜单区域),就会触发父li的hover样式,导致整块高亮。
修复步骤
你只需要修改CSS部分的3处规则即可:
- 把原来加在
li上的内边距移到a标签上,同时把a设为块级元素,避免hover触发父容器样式 - 拆分一级菜单和二级菜单的hover规则,分别对应不同层级的元素
- 保留原有的子菜单展开逻辑不变
完整修改后的CSS代码
*{ margin: 0; padding: 0; box-sizing: border-box; list-style: none; text-decoration: none; font-family: Calibri, Helvetica, Arial, Sans-Serif; } body { background-color: #348899; } .wrapper { display: flex; } .sidebar a { text-decoration: none; color: #343642; /* 新增:a标签设为块级,占满整行宽度 */ display: block; /* 新增:把原来li的padding移到这里 */ padding: 15px; } .wrapper .sidebar { position: fixed; width: 160px; height: 100%; background-color: #979C9C; color: #343642; padding: 20px 0; } .wrapper .sidebar h2 { text-align: center; margin-bottom: 20px; } /* 修改:去掉li上的padding,已经移到a标签了 */ .wrapper .sidebar ul li { } .wrapper .sidebar ul li a .fas { width: 25px; } /* 修改:一级菜单hover只作用在直接子a标签上 */ .wrapper .sidebar > ul > li > a:hover { background-color: #B1B6B6; color: #fff; } /* 新增:二级子菜单hover样式 */ .wrapper .sidebar ul li ul li a:hover { background-color: #B1B6B6; color: #fff; } .wrapper .sidebar ul li ul { display: none; position: relative; } .wrapper .sidebar ul li:hover ul { display: block; }
效果说明
修改后:
- 鼠标悬停在一级菜单的「Brass」文字区域时,仅Brass这一行高亮,同时展开子菜单
- 鼠标移到子菜单的各个选项上时,仅当前悬停的子项单独高亮,父级Brass不会再整块高亮
- 所有交互逻辑和原有设计保持一致,兼容所有主流浏览器,不需要额外JS代码
内容的提问来源于stack exchange,提问作者user17138068
相关产品推荐
相关产品推荐

