使下拉菜单可滚动

时间:2014-02-24 09:38:03

标签: javascript jquery html css drop-down-menu

我正在尝试使用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();
        });
    }
});

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

我该怎么做?

5 个答案:

答案 0 :(得分:27)

使用css之类的,

尝试此操作
#topNav ul li ul{
   max-height:250px;/* you can change as you need it */
   overflow:auto;/* to get scroll */
}

Demo

答案 1 :(得分:4)

您可以使用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
}

答案 2 :(得分:1)

使用CSS样式:

#topNav{
    overflow:scroll;
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

为什么不使用纯粹的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;
}