html - 仅使用 CSS 创建下拉列表项菜单

标签 html css drop-down-menu menu nav

在我正在处理的网站部分中,我有一个包含三个部分的 NAV 元素:关于、投资组合、联系方式。我试图做到这一点,当你将鼠标悬停在“作品集”部分时,会出现一个下拉菜单,允许你在其他两个部分“写作示例”和“Photoshop”之间进行选择。我正在尝试仅使用 CSS 来完成此操作。

这是我的 HTML 部分:

<nav>
            <ul>
                <li>
                    <a href="index.html" >About</a>
                </li>
                <li class="subNav">
                    <a class="selected" >Portfolio</a>
                    <ul>
                        <li><a href="writing_samples.html">Writing Samples</a></li>
                        <li><a href="photoshop.html">Photoshop</a></li>
                    </ul>
                </li>
                <li>
                    <a href="contact.html">Contact</a>
                </li>
            </ul>
        </nav>

和 CSS:

nav {
position: absolute;
bottom: 0;
right: 0;
padding: 10px 0;
} 

nav ul {
list-style: none;
margin: 0 10px;
padding: 0;
}

nav li {
display: inline-block;
}

nav a {
font-weight: 800;
padding: 15px 10px;
}

nav ul li.subNav ul {
display: none;
} 

nav ul li.subNav:hover ul {
display: block;
}

当我将鼠标悬停在 Portfolio 列表项上时,您会看到生成的列表项“Writing Samples”和“Photoshop”,只是它将这两个元素显示为原始无序列表的一部分,并且将“投资组合”列表项移动到其余元素之上。我希望“Writing Samples”和“Photoshop”垂直显示在“Portfolio”下,但我无法用 CSS 解决这个问题。

最佳答案

这是它的基础:

nav {
  position: absolute;
  padding: 10px 0;
}
nav ul {
  list-style: none;
  ;
  padding: 0;
}
nav > ul > li {
  display: inline-block;
  position: relative;
  border: 1px solid lightgreen;
  /* for demo */
}
nav a {
  font-weight: 800;
  padding: 5px 10px;
  display: block;
}
nav > ul > li.subNav ul {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  white-space: nowrap;
  background: pink;
}
nav ul li.subNav:hover ul {
  display: block;
}
<nav>
  <ul>
    <li>
      <a href="index.html">About</a>
    </li>
    <li class="subNav">
      <a class="selected">Portfolio</a>
      <ul>
        <li><a href="writing_samples.html">Writing Samples</a>
        </li>
        <li><a href="photoshop.html">Photoshop</a>
        </li>
      </ul>
    </li>
    <li>
      <a href="contact.html">Contact</a>
    </li>
  </ul>
</nav>

li 被赋予 position:relative 以提供定位上下文。

子菜单绝对定位,位于父级 li 的底部并左对齐。

请注意,我使用了直接子选择器 > 来仅定位我想要的元素。

然后,由于子菜单太宽而无法包含在父菜单的宽度内,我添加了 white-space:nowrap 以便文本按要求排列。

关于html - 仅使用 CSS 创建下拉列表项菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783353/

相关文章:

javascript - 使用 JavaScript 禁用 html 按钮不会 POST

html - Bootstrap : Fieldset enable/disable with radio button

javascript - 使用 JQuery 将 JSON 数据传递到 DIV 中

jquery - 显示当前页面的菜单

javascript - 受 jquery.selectBox 插件影响的表单选择框的更改值

html - 悬停时图像移动 - 边界问题

javascript - 将颜色更改为不同的 php 结果

javascript - 如何在使用 JQuery 悬停该 HTML 元素时在元素内设置工具栏?

javascript - 如何将 OPTGROUP 添加到 select 语句?

html - 下拉菜单左对齐