如何使下拉菜单宽度与选项卡大小相同?

Posted

技术标签:

【中文标题】如何使下拉菜单宽度与选项卡大小相同?【英文标题】:How do I make the dropdown menu width the same as the tab size? 【发布时间】:2015-04-27 18:31:10 【问题描述】:

我是新手 - 如果这是一个愚蠢的问题,我很抱歉。当我将鼠标悬停在下拉菜单选项上时,会出现子菜单,但子菜单的背景宽度为 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>

【问题讨论】:

【参考方案1】:

好的。在这里锻炼。可能存在更好的解决方案。

首先你需要给 div#menu 一个固定的高度。我也不认为你需要在那里漂浮。移除溢出隐藏和相对位置。

 #menu 
    width:100%;
    background-color:#f23918;
    height: 38px;
 

然后为子菜单添加以下内容

li ul 
    display: none;
    min-width: 100%;
    white-space: nowrap;

最后一个解决方案实际上归功于https://***.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;

【讨论】:

我唯一要添加到您的代码中的是#menu ul li .submenu position: absolute; z-index: 100 为底部移动的链接。但是,干得好 +1 我没有注意到这一点。更新:-) 谢谢@dowomenfart【参考方案2】:

我没有调整您的代码,而是根据您的需要重写了一个简化版本。

$(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>

【讨论】:

也试过了,感谢您提供如此优雅的解决方案

以上是关于如何使下拉菜单宽度与选项卡大小相同?的主要内容,如果未能解决你的问题,请参考以下文章

如何使下拉菜单的高度与引导程序4中子菜单的高度相同

引导、导航选项卡、下拉菜单;如何根据 URI 设置活动选项卡

统一更改下拉菜单的大小

css 下拉菜单与父级相同的宽度

html 选择下拉菜单宽度太大

MFC中如何做出一个下拉菜单并且做出不同的选项?