将滚动条添加到动态ul li

 紫夜丶月 发布于 2023-02-08 14:21

我搜索了很多帖子和论坛,因为我认为这可能是一个基本的东西,但没有找到它所以问这里,我想要做的是添加滚动条,如果高度超过一定的限制,让我们说如果菜单项超过3.

我创建了一个jsfiddle http://jsfiddle.net/euSWB/

如果您无法访问它,那么这里是HTML和CSS HTML


CSS

#mnav {
margin-left: -30px;
margin-right: -30px;
}
#mnav li {
float: left;
list-style: none;
}
#mnav li a, #mnav li a:link, #mnav li a:visited {
text-decoration: none;
}
#mnav li a:hover, #mnav li a:active {
text-decoration: none;
}
#mnav li:hover, #mnav li.sfhover {
position: static;
}
#mnav li ul {
display: block;
z-index: 9999;
position: absolute;
left: -999em;
width: 400px;
margin: 0px;
border: 1px solid #ddd;
}
#mnav li:hover ul, #mnav li.sfhover ul {
left: auto;
}
#mnav li ul li a, #mnav li ul li a:link, #mnav li ul li a:visited {
display: block;
margin: 0;
text-decoration: none;
z-index: 9999;
border-bottom: 1px dotted #ccc;
width: 500px;
}
#mnav li ul li a:hover, #mnav li ul li a:active {
display: block;
margin: 0;
text-decoration: none;
}

Joeytje50.. 16

我对原始样式表进行了一些调整,现在它将显示滚动条,但仅当它超过3个列表项的高度时(在这种情况下为63像素).这是最终的CSS代码:

#mnav {
    margin-left: -30px;
    margin-right: -30px;
}
#mnav li {
    float: left;
    list-style: none;
    margin:0 10px;/*Keeping 10px space between each nav element*/
}
#mnav li a,/*These can all be merged into a single style*/
#mnav li a:link,
#mnav li a:visited,
#mnav li a:hover,
#mnav li a:active {
    text-decoration: none;
}
#mnav li ul {
    display: none;/*This is the default state.*/
    z-index: 9999;
    position: absolute;
    width: 400px;
    max-height:63px;/*The important part*/
    overflow-y:auto;/*Also...*/
    overflow-x:hidden;/*And the end of the important part*/
    margin: 0px;
    padding-left:5px;/*Removing the large whitespace to the left of list items*/
    border: 1px solid #ddd;
}
#mnav li:hover ul, #mnav li.sfhover ul {
    display:block;/*This is the hovered state*/
}
#mnav li ul li a, #mnav li ul li a:link, #mnav li ul li a:visited {
    display: block;
    margin: 0;
    text-decoration: none;
    z-index: 9999;
    border-bottom: 1px dotted #ccc;
    width:400px;
}
#mnav li ul li a:hover, #mnav li ul li a:active {
    display: block;
    margin: 0;
    text-decoration: none;
}

这是它的演示.出于演示目的,我还将2个额外

  • 元素插入到 Home SQL Server与Oracle项目中.如果列表项少于3个, Home项将显示弹出窗口的行为方式.

    要解释每个更改的位,首先是实际执行操作的代码:

    定义max-heightto 63将使ul在低于63px的情况下正常运行,但如果超过该值,则会溢出并显示滚动条.如果要显示更多项目,只需将其max-height增加到所需高度即可.目前每件商品的高度为21px,所以我用它来获得3件商品的63px.

    由于溢出应该只显示垂直方向的滚动条,只overflow-y:auto;应该在那里,并overflow-x:hidden防止水平方向的滚动条.

    然后是我做出的其他一般性改变:

    我在项目之间添加了20px的边距(元素两边各10px),使列表在这里看起来更好一些.您可能想要应用自己的风格,这仅适用于此演示.

    我已经将你的隐藏技术改为"将它推-999em到左边"以隐藏它display:none.这样做更好,因为display:none不会在搜索引擎中呈现的元素,所以这将有助于这些情况.总的来说,我认为隐藏的东西display:none比将它从屏幕上移开更好,而它实际上仍然存在

    我已经删除了左侧的填充,ul因为它看起来非常糟糕.如果您没有将它用于虚线/编号列表,则无需默认填充.

    考虑到你对Zachary Carter的答案的评论,这也应该有效,因为如果你定义max-height210px(10项),这将不会显示一个巨大的白盒子.

  • 1 个回答
    • 我对原始样式表进行了一些调整,现在它将显示滚动条,但仅当它超过3个列表项的高度时(在这种情况下为63像素).这是最终的CSS代码:

      #mnav {
          margin-left: -30px;
          margin-right: -30px;
      }
      #mnav li {
          float: left;
          list-style: none;
          margin:0 10px;/*Keeping 10px space between each nav element*/
      }
      #mnav li a,/*These can all be merged into a single style*/
      #mnav li a:link,
      #mnav li a:visited,
      #mnav li a:hover,
      #mnav li a:active {
          text-decoration: none;
      }
      #mnav li ul {
          display: none;/*This is the default state.*/
          z-index: 9999;
          position: absolute;
          width: 400px;
          max-height:63px;/*The important part*/
          overflow-y:auto;/*Also...*/
          overflow-x:hidden;/*And the end of the important part*/
          margin: 0px;
          padding-left:5px;/*Removing the large whitespace to the left of list items*/
          border: 1px solid #ddd;
      }
      #mnav li:hover ul, #mnav li.sfhover ul {
          display:block;/*This is the hovered state*/
      }
      #mnav li ul li a, #mnav li ul li a:link, #mnav li ul li a:visited {
          display: block;
          margin: 0;
          text-decoration: none;
          z-index: 9999;
          border-bottom: 1px dotted #ccc;
          width:400px;
      }
      #mnav li ul li a:hover, #mnav li ul li a:active {
          display: block;
          margin: 0;
          text-decoration: none;
      }
      

      这是它的演示.出于演示目的,我还将2个额外<li>元素插入到 Home SQL Server与Oracle项目中.如果列表项少于3个, Home项将显示弹出窗口的行为方式.

      要解释每个更改的位,首先是实际执行操作的代码:

      定义max-heightto 63将使ul在低于63px的情况下正常运行,但如果超过该值,则会溢出并显示滚动条.如果要显示更多项目,只需将其max-height增加到所需高度即可.目前每件商品的高度为21px,所以我用它来获得3件商品的63px.

      由于溢出应该只显示垂直方向的滚动条,只overflow-y:auto;应该在那里,并overflow-x:hidden防止水平方向的滚动条.

      然后是我做出的其他一般性改变:

      我在项目之间添加了20px的边距(元素两边各10px),使列表在这里看起来更好一些.您可能想要应用自己的风格,这仅适用于此演示.

      我已经将你的隐藏技术改为"将它推-999em到左边"以隐藏它display:none.这样做更好,因为display:none不会在搜索引擎中呈现的元素,所以这将有助于这些情况.总的来说,我认为隐藏的东西display:none比将它从屏幕上移开更好,而它实际上仍然存在

      我已经删除了左侧的填充,ul因为它看起来非常糟糕.如果您没有将它用于虚线/编号列表,则无需默认填充.

      考虑到你对Zachary Carter的答案的评论,这也应该有效,因为如果你定义max-height210px(10项),这将不会显示一个巨大的白盒子.

      2023-02-08 14:24 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有