javascript - 如何让子菜单下推内容

标签 javascript jquery html css

我正在尝试弄清楚如何切换子菜单的显示,单击顶部菜单项打开子菜单,并使其相对定位,以便在动画打开时将内容向下推,并且还可以达到整个浏览器宽度。这也必须以保持顶级菜单完好无损的方式发生,这是我发现很难实现的。这是我的尝试:

jQuery("#nav > li").click(function(e) {
  e.preventDefault();

  jQuery(this).find('ul').slideToggle("slow");
});
.header-container {
  position: relative;
}
.main-nav #nav {
  text-align: center;
  margin: 0;
}
.main-nav #nav > li {
  display: inline-block;
  list-style: none;
}
.main-nav #nav > li ul {
  display: none;
  background: blue;
}
.wrapper {
  background: red;
  min-height: 500px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="header-container">
  <header class="main-header">
    <nav role="navigation" class="main-nav">
      <ul id="nav">
        <li>
          <a href="#">Link 1</a>
          <ul>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
          </ul>
        </li>
        <li>
          <a href="#">Link</a>
        </li>
        <li>
          <a href="#">Link</a>
        </li>
        <li>
          <a href="#">Link</a>
        </li>
      </ul>
    </nav>
  </header>
</div>
<div class="wrapper">
</div>

最佳答案

好吧,这有点棘手,但您可以使用 :before 伪元素和 position: absolute 来覆盖屏幕宽度。

要使此解决方案有效,您必须将其任何父级设置为position: relative。这样,:before 元素将占据整个宽度。

jQuery("#nav > li").click(function(e) {
  e.preventDefault();

  jQuery(this).find('ul').slideToggle("slow");
});
.header-container {
  position: relative;
}
.main-nav #nav {
  text-align: center;
  margin: 0;
}
.main-nav #nav > li {
  display: inline-block;
  list-style: none;
  vertical-align: top;
}
.main-nav #nav > li ul {
  display: none;
  background: blue;
}

.main-nav #nav > li ul:before {
  content:"";
  position:absolute;
  left: 0;
  right: 0;
  background: blue;
  height: 100%;
  z-index: -1;
}

.wrapper {
  background: red;
  min-height: 500px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="header-container">
  <header class="main-header">
    <nav role="navigation" class="main-nav">
      <ul id="nav">
        <li>
          <a href="#">Link 1</a>
          <ul>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
            <li>
              <a href="#">Link</a>
            </li>
          </ul>
        </li>
        <li>
          <a href="#">Link</a>
        </li>
        <li>
          <a href="#">Link</a>
        </li>
        <li>
          <a href="#">Link</a>
        </li>
      </ul>
    </nav>
  </header>
</div>
<div class="wrapper">
</div>

关于javascript - 如何让子菜单下推内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41564539/

相关文章:

javascript - 拦截表单上的 submit() 调用

javascript - 如何播放音频?

javascript - RxJS如何创建或模拟异步?

html - 如果我的元素有 `<figcaption>`,我还需要使用 title 属性吗?

html - 如何使带有水平滚动的div中的UL具有全宽

javascript - Expressjs 服务器上的 HTML 按钮运行 node.js 脚本

javascript - 我应该依靠 CSS3 来制作动画,还是为了非 WebKit 浏览器的利益而使用 JavaScript?

javascript - 查找某个类的父级的索引

javascript - Jquery函数在整个页面上显示加载图标

javascript - 生成随机的绿色阴影