【发布时间】:2014-10-22 05:00:49
【问题描述】:
我正在使用 jQuery 在下拉菜单打开时为其指定高度,以便在菜单下拉时将其下方的内容向下推。但是高度太高(102px);我认为它应该更像 50px,但它似乎给菜单提供了额外的高度,我似乎不明白为什么。我希望高度只是文本的高度,并且下面没有空白。
jQuery:
$(document).on('click', '#navpanel .mainnav a[href^="/#"]', function(e) {
if ($(this).parent('li').hasClass('expanded')) {
$(this).siblings('ul').css('display', 'block').slideDown('linear', function() {
$(this).parent('li').toggleClass('expanded');
});
} else {
$(this).siblings('ul').css('display', 'none').slideUp('linear', function() {
$(this).parent('li').toggleClass('expanded');
});
}
var objHeight = 0;
$.each($('ul.tier1').children(), function() {
objHeight += $(this).height();
});
$('ul.tier1').height(objHeight);
});
HTML:
<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>
</li>
</ul>
</div>
CSS
#navbar #navpanel .mainnav > ul > .active > ul {
display:block;
text-align:center;
}
#navbar .mainnav > ul > li {
display: block;
}
#navbar #navpanel .mainnav ul.tier1 {
padding:0;
margin:0;
border:0;
outline:0;
}
#navbar #navpanel .mainnav ul.tier1 > li {
font-size:13px;
font-family: 'TradeGothicLTStdCnNo.18';
padding:0 9px;
}
#navbar #navpanel .mainnav ul.tier1 > li:first-child {
padding-right:80px;
position:relative;
left:-10px;
}
#navbar #navpanel .mainnav ul.tier1 > li:last-child {
padding:0;
}
#navbar #navpanel .mainnav li li {
text-align:center;
}
#navbar #navpanel .mainnav li ul {
display:none;
}
#navbar #navpanel .mainnav ul.tier2 {
position:absolute;
height:auto;
width:600px;
left: 0;
right: 0;
font-size:11px;
margin:12px auto 0 auto;
}
#navbar #navpanel .mainnav ul.tier2 li {
padding-right:12px;
}
【问题讨论】:
-
来自 jquery 文档:“请注意,.height() 将始终返回内容高度,无论 CSS box-sizing 属性的值如何。从 jQuery 1.8 开始,这可能需要检索 CSS 高度加上 box-sizing 属性,然后在元素具有 box-sizing 时减去每个元素上的任何潜在边框和填充:border-box。为避免这种惩罚,请使用 .css("height") 而不是 .height()."。也许它可以帮助
-
用 css 创建小提琴
-
@VitorinoFernandes 下拉菜单部分通过 shopify 液体代码工作,所以 jsfiddle 不会这样做。
-
@EoiFirst 我将其更改为 .css('height'),但它仍然给出相同的高度。 ul 或 li 底部没有边框或填充。
-
请添加你的css代码。
标签: javascript jquery html css drop-down-menu