下拉菜单推家长菜单项

下拉菜单推家长菜单项

问题描述:

我有五个父菜单项,第三个有一个孩子下拉菜单。当你点击第三个父菜单时,下拉菜单出现,但它将第四个和第五个父母菜单项推到下面。我想让下拉菜单位于父菜单行的下面,而不需要推动任何父菜单项。这是一个Shopify网站。下拉菜单推家长菜单项

BeforeAfter

http://jsfiddle.net/3s2qhhx3/

//Main nav expanders 
 
$(document).on('click', '#navpanel .mainnav .title', function() { 
 
    $(this).parent().addClass('active').siblings().removeClass('active'); 
 
    $(window).trigger('reup-navbar'); 
 
}); 
 
var navSpeed = 150; 
 
$(document).on('click', '#navpanel .mainnav button', function() { 
 
    //Prep animation on sublist 
 
    if ($(this).parent().hasClass('expanded')) { 
 
    $(this).html('<span class="icon-plus"></span>'); 
 
    $(this).siblings('ul').stop(true, true).css('display', 'block').slideUp(navSpeed, 'linear', function() { 
 
     $(this).parent().toggleClass('expanded'); 
 
     $(window).trigger('reup-navbar'); 
 
    }); 
 
    } else { 
 
    $(this).html('<span class="icon-cross"></span>'); 
 
    $(this).siblings('ul').stop(true, true).css('display', 'none').slideDown(navSpeed, 'linear', function() { 
 
     $(window).trigger('reup-navbar'); 
 
    }); 
 
    $(this).parent().toggleClass('expanded'); 
 
    } 
 
    $(window).trigger('reup-navbar'); 
 
}); 
 
$(document).on('click', '#navpanel .mainnav a[href="#"]', function() { 
 
    $(this).siblings('button').trigger('click'); 
 
    return false; 
 
});
#navbar #navpanel .mainnav { 
 
    position: relative; 
 
    margin: 0 auto; 
 
} 
 
#navbar #navpanel .mainnav > ul > .active > ul { 
 
    display: block; 
 
    text-align: center; 
 
} 
 
#navbar #navpanel .mainnav li li { 
 
    position: relative; 
 
    display: inline; 
 
    text-align: center; 
 
}
<div class="mainnav"> 
 
    <ul class="tier1"> 
 
    <li id="blog">blog</li> 
 
    <li class=""> 
 
     <a class="tier1title" href="/collections/newarrivals">New Arrivals</a> 
 
    </li> 
 
    <li class=""> 
 
     <a class="tier1title" href="/#">Categories</a> 
 
     <ul class="tier2"> 
 
     <li class=""> 
 
      <a href="/collections/knits">Knits</a> 
 
     </li> 
 
     <li class=""> 
 
      <a href="/collections/tops">Tops</a> 
 
     </li> 
 
     <li class=""> 
 
      <a href="/collections/dresses">Dresses</a> 
 
     </li> 
 
     <li class=""> 
 
      <a href="/collections/bottoms">Bottoms</a> 
 
     </li> 
 
     . . . 
 
     <li class=""> 
 
      <a class="tier1title" href="/collections/sale">Sale</a> 
 
     </li> 
 
     <li class="registerform"> 
 
      ... 
 
     </li> 
 
     </ul> 
 
</div>

+0

javascript代码在哪里? – 2014-10-11 23:43:11

+0

@AlexChar已添加。感谢您看帖子。 – 2014-10-11 23:48:05

+0

当发布问题时最好张贴小提琴来演示问题。这样更多的人会帮助你:) – 2014-10-12 00:11:38

您需要在子菜单的position设置为absolute。此外,您需要将第一个<li>显示屏更改为inline-block而不是inline

CSS:

.mainnav { 
    position: relative; 
    margin: 0 auto; 
} 

.mainnav ul > li { 
    display: inline-block; 
    text-align: center; 
} 
.mainnav ul li:hover ul { 
    display:block; 
    background:red; 
    height:auto; 
    width:auto; 
} 
.mainnav ul li ul { 
    position: absolute; 
    display: none; 
    padding: 0; 
    margin: 0; 
} 

希望它能帮助。 Updated Fiddle ..

+0

谢谢!为什么我需要将第一个li更改为inline-block? – 2014-10-12 15:28:20

+0

当你只放入'inline'时,下一个元素将出现在它旁边。通过将其更改为'inline-block',它将在其旁边保留空格,这就是为什么下一个'ul'显示在'li'下面的原因。看看这个[链接](http://css-tricks.com/almanac/properties/d/display/)以获得更好的理解。 – 2014-10-12 15:53:22

+0

非常感谢! – 2014-10-12 20:50:39