我是新手,如果这是一个愚蠢的问题,很抱歉。当我将鼠标悬停在下拉菜单选项上时,会显示子菜单,但子菜单的背景宽度为100%,与主菜单类似。我如何更改它,使子菜单的宽度仅为,例如,它源自的选项卡?
此外,对混乱的编码表示歉意。我在玩jquery,所以里面有一些不必要的标签。。。
这是CSS代码:
#menu {
float:left;
width:100%;
background-color:#f23918;
overflow:hidden;
position:relative;
}
#menu ul {
clear:left;
float:left;
list-style:none;
margin:0;
padding:0;
position:relative;
left:50%;
text-align:center;
}
ul li {
display:block;
float:left;
list-style:none;
margin:0;
padding:0;
position:relative;
right:50%;
}
li ul {
display: none;
}
ul li a {
display: block;
text-decoration: none;
font-weight: bold;
color: #ffffff;
white-space: nowrap;
background-color: #f23918;
text-align: center;
padding: 10px;
text-transform: uppercase;
}
ul li a:hover {
background: #f29c18;
}
li:hover ul {
display: block;
position: absolute;
}
li:hover li { /*Controls dropdowns*/
float: none;
font-size: 11px;
}
li:hover a { background: #f23918;
}
li:hover li a:hover
{
background: #f29c18;
}
这是HTML代码:
<div id="menu">
<ul id="navbar">
<li class="active"><a href="#"><span>Home</span></a></li>
<li class="has-sub"><a href="#"><span>Alpaca Wool Products</span></a>
<ul class="submenu">
<li><a href="#"><span>Fur Hats</span></a></li>
<li><a href="#"><span>Capes</span></a></li>
<li><a href="#"><span>Ponchos</span></a></li>
<li><a href="#"><span>Shawls</span></a></li>
<li class="last"><a href="#"><span>Scarves</span></a></li>
</ul>
</li>
<li class="has-sub"><a href="#"><span>Home Décor</span></a>
<ul class="submenu">
<li><a href="#"><span>Rugs</span></a></li>
<li><a href="#"><span>Tapestries</span></a></li>
<li><a href="#"><span>Throws</span></a></li>
<li><a href="#"><span>Upholstery</span></a></li>
<li class="last"><a href="#"><span>Teddy Bears</span></a></li>
</ul>
</li>
<li><a href="#"><span>About Us</span></a></li>
<li class="last"><a href="#"><span>Artisans</span></a></li>
</ul>
</div>
好的。这是锻炼。也许还有更好的解决方案。
首先,您需要给div#菜单一个固定的高度。此外,我认为你不需要花车。删除隐藏的溢出并相对定位。
#menu {
width:100%;
background-color:#f23918;
height: 38px;
}
然后对于子菜单,添加以下
li ul {
display: none;
min-width: 100%;
white-space: nowrap;
}
最后一个解决方案实际归功于https://stackoverflow.com/a/13775531/2120162
在这里你可以找到它的样子。https://jsfiddle.net/theprog/3h8wpx97/1/
更新:修复了移动部件。感谢@dowomenfart
li ul {
display: none;
min-width: 100%;
white-space: nowrap;
position:absolute !important;
z-index: 100;
}
我没有调整您的代码,而是根据您的需要重写了简化版本。
$(document).ready(function () {
$("#navbar > li").mouseover(function () {
if (!$(this).hasClass("active")) {
$(this).addClass("active");
$(this).mouseout(function () {
$(this).removeClass("active");
});
}
});
});
#navbar {
background: #f23918;
padding: 0;
margin: 0;
font-size: 0; /*fix inline block gap*/
}
#navbar > li {
font-size: 16px;
list-style: none;
position: relative;
display: inline-block;
padding: 0;
margin: 0;
}
#navbar > li > a {
text-transform: uppercase;
text-decoration: none;
font-size: 16px;
font-weight: bold;
padding: 10px;
display: block;
color: #fff;
}
#navbar > li > a:hover,
#navbar > li.active > a,
#navbar > li > ul {
background: #f29c18;
}
#navbar > li > ul {
display: none;
white-space: nowrap;
padding: 0 0 5px;
margin: 0;
position: absolute;
left: 0;
top: 36px;
}
#navbar > li > ul > li {
display: block;
margin: 10px 20px;
padding: 0;
}
#navbar > li > ul > li > a {
color: #fff;
}
#navbar > li:hover > ul {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="navbar">
<li>
<a href="#">Item A</a>
<ul>
<li><a href="#">Sub Item 1</a></li>
<li><a href="#">Sub Item 2</a></li>
<li><a href="#">Sub Item 3</a></li>
</ul>
</li>
<li>
<a href="#">Item B</a>
<ul>
<li><a href="#">Sub Item 1</a></li>
<li><a href="#">Sub Item 2</a></li>
<li><a href="#">Sub Item 3</a></li>
</ul>
</li>
<li class="active">
<a href="#">Item C</a>
<ul>
<li><a href="#">Sub Item 1</a></li>
<li><a href="#">Sub Item 2</a></li>
<li><a href="#">Sub Item 3</a></li>
</ul>
</li>
<li>
<a href="#">Item D NoSub</a>
</li>
</ul>