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

鼠标从菜单移至子菜单时子菜单消失,求CSS修改方案

解决多级菜单鼠标切换时子菜单消失的问题

问题根源

你当前的代码中,子菜单.sub-1是level_1链接的相邻兄弟元素,只有当鼠标悬停在level_1链接上时才会触发显示。一旦鼠标离开链接移向子菜单,链接的hover状态消失,子菜单就会被隐藏。另外,子菜单使用负margin定位,和父元素之间存在视觉间隙,鼠标移动时容易触发hover中断。

修改方案

无需使用<ul>/<li>标签,只需调整HTML结构和CSS规则即可解决,具体步骤如下:

1. 调整HTML结构

将level_1链接和对应的子菜单.sub-1包裹在同一个容器中,让hover状态可以覆盖父菜单项和子菜单的范围:

<div class="dropdown" id="myDropdown">
  <button class="dropbtn">
    <i style="font-size: 24px" class="fa"></i> level_0
    <i class="fa fa-caret-down"></i>
  </button>
  <div class="dropdown-content">
    <!-- 新增容器包裹父菜单项和子菜单 -->
    <div class="dropdown-item">
      <a href="#">level_1</a>
      <div class="sub-1">
        <a href="#">level_1-1</a>
        <a href="#">level_1-2</a>
        <a href="#">level_1-3</a>
      </div>
    </div>
    <a href="#">level_2</a>
    <a href="#">level_3</a>
  </div>
</div>

2. 修改CSS规则

针对新的结构调整hover逻辑,优化子菜单定位,消除hover中断的可能:

.dropdown .dropbtn {
  border: none;
  outline: none;
  color: #0f4391;
  padding: 8.5px 15px;
  background-color: inherit;
  font-family: inherit;
}

.dropdown-content,
.sub-1 {
  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,
.sub-1 a {
  float: none;
  color: #0f4391;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropbtn:hover {
  background-color: lightgray;
  color: black;
}

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

/* 新增容器样式,设置相对定位作为子菜单的参考 */
.dropdown-content .dropdown-item {
  position: relative;
}

/* 当容器hover时显示子菜单,覆盖父菜单项和子菜单的范围 */
.dropdown-content .dropdown-item:hover .sub-1 {
  background-color: hotpink;
  display: block;
  /* 用left和top定位,避免负margin导致的间隙 */
  left: 100%;
  top: 0;
}

/* 可选:给容器hover时也加上背景色,提升交互反馈 */
.dropdown-content .dropdown-item:hover > a {
  background-color: lightgray;
  color: black;
}

关键修改点

  • 结构调整:将父菜单项和子菜单放入同一容器,让hover状态作用于整个区域,而非单个链接
  • 定位优化:使用left: 100%; top: 0;替代负margin,消除子菜单和父元素之间的间隙,避免鼠标移动时触发hover中断
  • hover逻辑:改为监听容器的hover状态,确保鼠标在父菜单项或子菜单上时,子菜单始终保持显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:51