javascript - 托盘菜单在内容后向下滑动

标签 javascript html css

我一直在看这个菜单,但遇到了一个我似乎无法弄清楚的奇怪问题——感觉有点愚蠢!我希望它作为现有内容上的托盘菜单向下滑动。但是,它会向下滑动到内容下方。我似乎无法弄清楚为什么会这样。帮忙?

https://jsfiddle.net/ticklishoctopus/gdfv4wzn/

$(window).on('resize', function() {
      $('ul.sub-menu').each(function() {
        var width = 0;
        $(this).children('li').each(function() {
          width += $(this).width();
          console.log('inner width' + $(this).width());
        });
        console.log('total width' + width);
        $(this).css('padding-left', $(window).width() / 2 - width / 2);
      });
    });
    $(window).trigger('resize');
@import url(https://fonts.googleapis.com/css?family=Cabin);
    html,
    body {
      margin: 0;
      padding: 0;
      font-family: Cabin, sans-serif;
      text-transform: uppercase;
      background-color: #ade;
    }

    .clear {
      clear: both;
    }

    ul,
    li {
      list-style: none;
      text-indent: none;
    }

    .menu {
      width: 100%;
      z-index: 50;
      display: block;
      background: blue;
      height: 110px;
      margin-top: 0px;
      box-sizing: border-box;
      background-image: url('images/gradient-line.png');
      background-repeat: repeat-x;
      background-position: left bottom;
      padding-right: 30px;
    }

    .menu .menu-item {}

    .menu .menu-item a {
      display: block;
      float: left;
      font-size: 13pt;
      line-height: 64px;
      height: 100px;
      font-weight: 700;
      text-decoration: none;
      color: #fff;
      padding: 5px 30px;
      margin-top: 25px;
    }

    .menu .menu-item .sub-menu {
      position: absolute;
      left: 0;
      top: -50px;
      z-index: -1;
      transition: all .5s;
      width: 100%;
    }

    .menu .menu-item .sub-menu li {
      display: inline-block;
    }

    .menu .menu-item:hover .sub-menu {
      top: 150px;
    }

    .menu .menu-item .sub-menu .menu-item a {
      text-align: center;
      background: rgba(155, 75, 105, .8);
      padding: 0 20px;
      display: block;
      float: left;
      color: #ddd;
      border: none;
      height: 64px;
      font-size: 12px;
    }

    .menu .menu-item .sub-menu .menu-item a:hover {
      color: #fff;
    }

    .menu .menu-item:hover .sub-menu .menu-item a {
      height: 64px;
      display: block;
      opacity: 1;
      filter: alpha(opacity=100);
      -webkit-transition: all 0.5s ease;
      -moz-transition: all 0.5s ease;
      -ms-transition: all 0.5s ease;
      -o-transition: all 0.5s ease;
      transition: all 0.5s ease;
    }

    .sub-menu {
      background-color: #fff;
      padding-top: 30px;
      padding-bottom: 20px;
      text-align: center;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>

      <header>

        <ul class="menu">
          <li class="menu-item"><a href="#">MENU 1 <i class="fa fa-sort-desc"></i></a>
            <ul class="sub-menu">
              <li class="menu-item"><a href="#">Mission</a></li>
              <li class="menu-item"><a href="#">History</a></li>
              <li class="menu-item"><a href="#">News &amp; Conventions</a></li>
              <li class="menu-item"><a href="#">Customer Service</a></li>
            </ul>
          </li>

          <li class="menu-item"><a href="#">MENU 2 <i class="fa fa-sort-desc"></i></a>
            <ul class="sub-menu">
              <li class="menu-item"><a href="#">Catalog</a></li>
              <li class="menu-item"><a href="#">Sketches</a></li>
              <li class="menu-item"><a href="#">Accessories</a></li>
            </ul>
          </li>

          <li class="menu-item"><a href="#">MENU 3 <i class="fa fa-sort-desc"></i></a>
            <ul class="sub-menu">
              <li class="menu-item"><a href="#">Catalog</a></li>
              <li class="menu-item"><a href="#">Sketches</a></li>
              <li class="menu-item"><a href="#">Accessories</a></li>
            </ul>
          </li>

        </ul>

      </header>

      <p class="clear"></p>

      <main>

        Content goes here.

      </main>

    </body>

最佳答案

如前所述,您必须将元素一直定位到子菜单。它还有助于将菜单 ul 本身包装在一个定位的 div 中,其 z-index 高于页面内容:

.header-wrapper {
  position: relative;
  display: block;
  z-index: 1;
}
.menu {
    position: relative;
    width: 100%;
    display:block;
    background: blue;
    height: 110px;
    margin-top: 0px;
    box-sizing: border-box;
    background-image: url('images/gradient-line.png');
    background-repeat: repeat-x;
    background-position: left bottom;
    padding-right: 30px;
}
.menu .menu-item {
  position: relative;
}
.menu .menu-item a {
    display: block;
    position: relative;
    float: left;
    font-size: 13pt;
    line-height: 64px;
    height: 100px;
    font-weight:700;
    text-decoration: none;
    color: #fff;
    padding: 5px 30px;
    margin-top: 25px;
}

关于javascript - 托盘菜单在内容后向下滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819834/

相关文章:

javascript - 跨域 AJAX post 调用

jquery - 重叠两个 Action 链接并优先考虑顶部的 Action 链接

html - 使用 grid-column-start 会导致网格元素的自动放置停止工作

html - div 不会向左移动或响应定位

php - jQuery,在表单发布期间查找元素的 ID

javascript - Kendo Grid 如何以编程方式聚焦网格单元格并阻止选择文本

javascript - 如何在 React 中使用 POST 方法将对象添加到数据库?

javascript - 捕获 Facebook 分享/发布到 FB 事件

javascript - 在 iframe 循环中显示 URL

css - 如何更改将级联出来的 JavaFX 8 Modena 主题中的 BASE 字体大小?