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

Selenium WebDriver鼠标悬停操作:主菜单悬停后如何操作子菜单?

Hey there! Let's walk through how to implement this nested menu interaction—since you mentioned hovering over the main menu first, clicking it, then interacting with sub-menu items via hover, I've got two practical approaches for you:

方案1:纯CSS + 隐藏复选框(无需JS,适合简单场景)

This method uses a hidden checkbox to track the main menu's clicked state, paired with CSS selectors to keep the sub-menu open after clicking, while supporting hover interactions on sub-items.

Step 1: Build the HTML structure

<nav class="menu-container">
  <!-- 主菜单:悬停时会有样式反馈,点击触发菜单展开 -->
  <label class="main-menu" for="menu-toggle">主菜单</label>
  <!-- 隐藏的复选框,用来记录点击状态 -->
  <input type="checkbox" id="menu-toggle" hidden>
  <!-- 子菜单容器 -->
  <ul class="sub-menu">
    <li class="sub-menu-item">子菜单选项1</li>
    <li class="sub-menu-item">子菜单选项2</li>
    <li class="sub-menu-item has-child">
      带二级子菜单的选项
      <ul class="sub-sub-menu">
        <li>二级子菜单1</li>
        <li>二级子菜单2</li>
      </ul>
    </li>
  </ul>
</nav>

Step 2: Add CSS styles

/* 主菜单基础样式 */
.main-menu {
  padding: 10px 20px;
  background: #f0f0f0;
  cursor: pointer;
  display: inline-block;
}

/* 主菜单悬停时的反馈效果 */
.main-menu:hover {
  background: #ddd;
}

/* 默认隐藏子菜单 */
.sub-menu {
  display: none;
  list-style: none;
  padding: 0;
  margin: 0;
  border: 1px solid #eee;
}

/* 点击主菜单后,显示子菜单 */
#menu-toggle:checked + .sub-menu {
  display: block;
}

/* 子菜单选项基础样式 */
.sub-menu-item {
  padding: 8px 15px;
  cursor: pointer;
}

/* 子菜单选项悬停时高亮 */
.sub-menu-item:hover {
  background: #e5e5e5;
}

/* 默认隐藏二级子菜单 */
.sub-sub-menu {
  display: none;
  list-style: none;
  padding-left: 20px;
}

/* 悬停带二级子菜单的选项时,展开二级菜单 */
.sub-menu-item.has-child:hover .sub-sub-menu {
  display: block;
}
方案2:JavaScript实现(适合复杂交互场景)

If you need more flexibility—like closing the menu when clicking outside, adding smooth animations, or handling dynamic content—JS is the way to go.

Step 1: HTML structure

<nav class="menu-container">
  <div class="main-menu">主菜单</div>
  <ul class="sub-menu">
    <li class="sub-menu-item">子菜单选项1</li>
    <li class="sub-menu-item">子菜单选项2</li>
    <li class="sub-menu-item has-child">
      带二级子菜单的选项
      <ul class="sub-sub-menu">
        <li>二级子菜单1</li>
        <li>二级子菜单2</li>
      </ul>
    </li>
  </ul>
</nav>

Step 2: CSS styles with animations

.main-menu {
  padding: 10px 20px;
  background: #f0f0f0;
  cursor: pointer;
  display: inline-block;
}

.main-menu:hover {
  background: #ddd;
}

/* 子菜单默认收起,用max-height实现平滑展开/收起 */
.sub-menu {
  list-style: none;
  padding: 0;
  margin: 0;
  border: 1px solid #eee;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}

/* 激活状态下展开子菜单 */
.sub-menu.active {
  max-height: 300px; /* 根据你的菜单内容调整高度 */
}

.sub-menu-item {
  padding: 8px 15px;
  cursor: pointer;
}

.sub-menu-item:hover {
  background: #e5e5e5;
}

.sub-sub-menu {
  list-style: none;
  padding-left: 20px;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}

.sub-menu-item.has-child:hover .sub-sub-menu {
  max-height: 200px;
}

Step 3: JavaScript logic

const mainMenu = document.querySelector('.main-menu');
const subMenu = document.querySelector('.sub-menu');

// 点击主菜单,切换子菜单的展开/收起状态
mainMenu.addEventListener('click', () => {
  subMenu.classList.toggle('active');
});

// 可选:点击页面其他区域时关闭菜单
document.addEventListener('click', (e) => {
  if (!mainMenu.contains(e.target) && !subMenu.contains(e.target)) {
    subMenu.classList.remove('active');
  }
});

Pick the approach that fits your use case—pure CSS works great for static, simple menus, while JS gives you full control for more dynamic interactions.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:02:10