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

嵌套<ul>元素:hover伪类失效,如何实现下拉菜单?

解决导航下拉菜单:hover伪类失效问题

问题根源

你的HTML结构有误——下拉菜单的<ul>应该嵌套在对应的父<li>内部,而不是作为兄弟元素放在外面。当前结构下,nav li:hover ul选择器找不到目标ul,因为ul是li的同级元素,不是后代元素;而nav ul:hover ul会触发所有下拉,是因为只要鼠标悬停在最外层ul的任何区域,都会选中所有后代ul。

修正步骤

1. 修复HTML结构

把每个下拉<ul>移到对应的父<li>标签内部,确保层级关系正确:

<nav>
    <ul>
      <li><a href="index.html">Home</a></li>
      <li>
        <a href="#">Link 2</a>
        <ul>
          <li><a href="#">Drop 1</a></li>
          <li><a href="#">Drop 2</a></li>
          <li><a href="#">Drop 3</a></li>
          <li><a href="#">Drop 4</a></li>
        </ul>
      </li>
      <li>
        <a href="#">Link 3</a>
        <ul>
          <li><a href="#">Link 3 Drop</a></li>
        </ul>
      </li>
      <li>
        <a href="#">Link 4</a>
        <ul>
          <li><a href="#">Link 4 Drop</a></li>
        </ul>
      </li>
      <li><a href="#">Link 5</a></li>
    </ul>
  </nav>

2. 调整CSS优化布局

你的nav li:hover ul { display: block; }是正确的选择器,修复HTML后就能正常工作。另外给父li添加相对定位,让下拉菜单相对于父元素定位,避免布局混乱:

nav li {
  border-bottom: 1px solid #002171;
  position: relative; /* 添加相对定位 */
}

nav ul ul {
  position: absolute;
  display: none;
  padding: 0;
  top: 100%; /* 下拉菜单紧贴父li底部 */
  left: 0;
}

效果说明

修复后,只有鼠标悬停在包含下拉菜单的父<li>上时,对应的下拉<ul>才会显示,不会出现全局触发的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:55:16