CSS3使用列表项弹出导航

时间:2015-11-08 05:41:12

标签: html css html5 css3

我对网站和HTML / CSS编码比较陌生。我有一个任务,我想使用列表制作一个CSS生成的弹出菜单。这是我在页面顶部导航的HTML,每当我尝试更改CSS中列表项的高度以给它弹出效果时它会将其余内容推下来而不是占用上面的空间。到目前为止,这是我的代码:

  nav {
    margin: 0;
    padding: 0;
    overflow: auto;
  }
  nav li {
    width: 18%;
    margin: 5px;
    padding: 0;
    list-style-type: none;
    border-top-left-radius: 15px;
    border-top-right-radius: 15px;
    border: 5px solid black;
    background-color: black;
    float: left;
  }
  nav a {
    display: block;
    padding: 0;
    text-decoration: none;
    color: white;
    text-align: center;
  }
  nav li:hover {
    margin-top: 0px;
    height: 100px;
  }
<nav>
  <ul>
    <li>
      <a href="#">
        <div class="menuItem">Home</div>
      </a>
    </li>
    <li>
      <a href="#">
        <div class="menuItem">Upcoming Flights</div>
      </a>
    </li>
    <li>
      <a href="#">
        <div class="menuItem">About Us</div>
      </a>
    </li>
    <li>
      <a href="#">
        <div class="menuItem">Travel Guide</div>
      </a>
    </li>
    <li>
      <a href="#">
        <div class="menuItem">Contact Us</div>
      </a>
    </li>
  </ul>
</nav>

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这里的关键是要有一个负余量顶部和一些额外的填充底部,它会在悬停时添加。我还给导航指定了一个高度,并将溢出设置为隐藏,但这并非完全必要。当然不是唯一的方法。 Here's a fiddle要看到它的实际效果。希望这可以帮助。

nav { 
  height: 58px;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

nav li {
  width: 16%;
  margin: 14px 0 0px 14px;
  padding: 0;
  list-style-type: none;
  border-top-left-radius: 15px;
  border-top-right-radius: 15px; 
  border: 5px solid black;
  background-color: black;
  float: left;
}

nav a {
  display: block;
  padding: 0;
  text-decoration: none;
  color: white;
  text-align: center;
} 

nav li:hover {
  margin-top: -10px;
  padding-bottom: 30px; 
}

img {
  width: 100%;
  margin: auto;   
}

答案 1 :(得分:1)

以下是一种可以在不推送内容的情况下弹出菜单的方法:

nav {
  margin: 0;
  padding: 0;
  overflow: auto;
  margin-top: 75px;
}
nav ul {
  position: fixed;
  width: 100%;
}
nav li {
  width: 18%;
  margin: 5px;
  padding: 0;
  list-style-type: none;
  border-top-left-radius: 15px;
  border-top-right-radius: 15px;
  border: 5px solid black;
  background-color: black;
  display: inline-block;
  vertical-align: bottom;
}
nav a {
  display: block;
  padding: 0;
  text-decoration: none;
  color: white;
  text-align: center;
}
nav li:hover {
  margin-top: 0px;
  height: 100px;
  margin-top: -77px;
}
.clear {
  margin-top: 100px;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title></title>
</head>

<body>
  <nav>
    <ul>
      <li>
        <a href="#">
          <div class="menuItem">Home</div>
        </a>
      </li>
      <li>
        <a href="#">
          <div class="menuItem">Upcoming Flights</div>
        </a>
      </li>
      <li>
        <a href="#">
          <div class="menuItem">About Us</div>
        </a>
      </li>
      <li>
        <a href="#">
          <div class="menuItem">Travel Guide</div>
        </a>
      </li>
      <li>
        <a href="#">
          <div class="menuItem">Contact Us</div>
        </a>
      </li>
    </ul>
  </nav>
  <div class="clear"></div>
  <p>Here is the content</p>
  <p>Here is more content</p>
</body>

</html>

如果你给ul一个固定的位置,它不会影响页面上的其他元素。然后,在悬停时,li的边距是-77px,因此它不会将自己推离页面顶部。也许有点被黑客攻击,但只要您的页面以足够宽的分辨率运行,这应该可以解决您的问题。