使下拉菜单可滚动

Posted

技术标签:

【中文标题】使下拉菜单可滚动【英文标题】:Making a drop-down menu scrollable 【发布时间】:2014-03-25 21:11:25 【问题描述】:

我正在尝试使用 CSS 和 jquery 在 html 页面中实现下拉菜单。这是 HTML 和 javascript 代码的示例。

<nav id="topNav">
  <ul>
    <li><a href="#" title="Nav Link 1">Menu 1</a></li>
    <li>
      <a href="#" title="Nav Link 2">Menu 2</a>
      <ul>
        <li><a href="#" title="Sub Nav Link 1">Sub Nav Link 1</a></li>
        <li><a href="#" title="Sub Nav Link 2">Sub Nav Link 2</a></li>
        <li><a href="#" title="Sub Nav Link 3">Sub Nav Link 3</a></li>
        <li><a href="#" title="Sub Nav Link 4">Sub Nav Link 4</a></li>
        <li class="last"><a href="#" title="Sub Nav Link 5">Sub Nav Link 5</a></li>
      </ul>
    </li>
    <li>
        <a href="#" title="Nav Link 3">Menu 3</a>
    </li>
  </ul>
</nav>

这里是 Javascript 代码:

var nav = $("#topNav");

//add indicators and hovers to submenu parents
nav.find("li").each(function() 
    if ($(this).find("ul").length > 0) 

        $("<span>").text("^").appendTo($(this).children(":first"));

        //show subnav on hover
        $(this).click(function() 
            $(this).find("ul").stop(true, true).slideToggle();
        );
    
);

我将以编程方式向菜单添加内容,并且我希望下拉菜单的内容变得太大时可以滚动。

我该怎么做?

【问题讨论】:

这个链接可以帮助你css-tricks.com/long-dropdowns-solution @Sam1604 那篇文章来自 2009 年。它仍然是最先进的吗? 【参考方案1】:

使用css 试试这个,

#topNav ul li ul
   max-height:250px;/* you can change as you need it */
   overflow:auto;/* to get scroll */

Demo

【讨论】:

自动更好是overflow-y:auto @RobSedgwick 是auto 更好,如果你设置scroll 那么有always a scroller` 可用,无论你的元素高度是否超过。【参考方案2】:

为什么不使用纯 CSS 解决方案?

FIDDLE

您可以更改转场属性以获得您喜欢的幻灯片的动画样式,并更改max-height 值以在滚动发生之前限制下拉菜单的大小。

HTML

<ul id='menu'>
    <li>item</li>
    <li>item</li>
    <li>dropdown
        <ul>
            <li>item</li>
            <li>item</li>
            <li>item</li>
            <li>item</li>
            <li>item</li>
            <li>item</li>
            <li>item</li>
        </ul>
    </li>
</ul>

CSS

body, html 
    width:100%;

ul 
    list-style:none;
    margin:0;
    padding:0

#menu > li 
    display:inline-block;
    border:1px solid grey;
    position:relative;

#menu li ul 
    position:absolute;
    border:1px solid grey;
    width:100%;
    max-height:0;
    overflow:hidden;
    -moz-transition: 1s;
    -ms-transition: 1s;
    -o-transition: 1s;
    -webkit-transition: 1s;
    transition: 1s;

#menu li:hover ul 
    overflow:auto;
    max-height:50px;

【讨论】:

【参考方案3】:

有一个css属性max-height可以使用:

#topNav ul ul
   max-height:150px;  // you choice of number in pixels
   overflow-x:hidden; // hides the horizontal scroll
   overflow-y:auto;   // enables the vertical scroll

【讨论】:

【参考方案4】:

不可以设置一个高度然后溢出:auto,作为CSS一个属性吗?滚动条会自动出现吗?

【讨论】:

【参考方案5】:

使用 CSS 样式:

#topNav
    overflow:scroll;

【讨论】:

以上是关于使下拉菜单可滚动的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 中带有子菜单的可滚动下拉菜单

使引导下拉菜单仅向下移动?

Select2 下拉菜单 - 滚动条不可用

启用 scrollX 时,包含按钮下拉列表的行会导致垂直滚动

在 Excel 中,列表框可​​以有一个下拉菜单而不是滚动条吗?

Bootstrap 3:如何在导航栏中使下拉链接的头部可点击