我正在尝试创建一个导航栏,其中包含第一个菜单的4个菜单和一个子菜单,但是,我无法创建子菜单。到目前为止,这是我的代码,我不确定如何悬停甚至单击第一个菜单时如何显示子菜单。谢谢。

<!DOCTYPE html>
<html>
<head>
<title> Website </title>
<link rel="stylesheet" type="text/css" href="css.css">
</head>
<body>
    <nav>
        <ul>
            <li><a class="#" href="#">Menu 1</a></li>
                <ul>
                    <li>Submenu 1</li>
                </ul>
            <li><a href="#">Menu 2</a></li>
            <li><a href="#">Menu 3</a></li>
            <li><a href="#">Menu 4</a></li>
        </ul>
    </nav>
</body>
</html>


这是我的CSS

nav ul {
        list-style-type: none;
        margin: 0;
        padding: 0;
        overflow: hidden;
        background-color: #111111;
        border: solid 1px black;
}
nav ul li {
    float: left;
}
nav ul li a {
    display: block;
    color: white;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
}
nav ul li a:hover {
    background-color: #ee8601;
}
.active {
    background-color: #ee8601;
}

最佳答案

HTML错误:ul不是ul的有效后代(应该在li内部)
CSS:将li设置为position:relative;以便包含内部Sub-UL的位置
CSS(缺失部分):将Sub ul设置为position:absolute;display:none;
CSS(缺少部分):在li:hover> display:block;上,它是子ul元素。


范例1:

使用display: none/block显示子菜单



nav ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  /*overflow: hidden;*/
  background-color: #111;
  /*border: solid 1px black;*/
}
nav ul li {
  /*float: left;*/
  display:inline-block; /*add istead of "float:left;" */
  vertical-align:top; /*add*/
  position:relative; /*add to contain sub ul*/
}
nav a {
  display: block;
  color: white;
  text-align: center;
  white-space:nowrap; /*add*/
  padding: 14px 16px;
  text-decoration: none;
}
nav li:hover > a, /* target the LI:hover, than change styles to A */
nav a.active{ /* merge together */
  background-color: #ee8601;
}

/* HIDE sub ul */
nav li ul{
  position:absolute;
  display:none;
}
/* SHOW sub ul */
nav li:hover ul{
  display:block;
}

<nav>
  <ul>
    <li>
      <a class="#" href="#">Menu 1</a>
      <ul>
        <li><a href="#">Submenu 1</a></li>
      </ul>
    </li>
    <li><a href="#">Menu 2</a></li>
    <li><a href="#">Menu 3</a></li>
    <li><a href="#">Menu 4</a></li>
  </ul>
</nav>







上面使用的是display none/block,现在让我们看看如何通过添加一些动画使其更新鲜:

范例2:

使用visibility, opacity, transition and transform显示子菜单



nav ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  background-color: #111;
}
nav ul li {
  display:inline-block;
  vertical-align:top;
  position:relative;
}
nav a {
  display: block;
  color: white;
  text-align: center;
  white-space:nowrap;
  padding: 14px 16px;
  text-decoration: none;
}
nav li:hover > a,
nav a.active{
  background-color: #ee8601;
}
nav li ul{ /* HIDE sub ul */
  position:absolute;
  visibility:hidden;
  opacity:0;
  transition:0.2s;
  transform: translateY(20%);
}
nav li:hover ul{  /* SHOW sub ul */
  visibility: visible;
  opacity:1;
  transform: translateY(0%);
}

<nav>
  <ul>
    <li>
      <a class="#" href="#">Menu 1</a>
      <ul>
        <li><a href="#">Submenu 1</a></li>
      </ul>
    </li>
    <li><a href="#">Menu 2</a></li>
    <li><a href="#">Menu 3</a></li>
    <li><a href="#">Menu 4</a></li>
  </ul>
</nav>

关于html - 我无法创建导航栏子菜单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34033749/

10-12 12:17
查看更多