ChatGPT解决这个技术问题 Extra ChatGPT

带有 Bootstrap 的可滚动菜单 - 菜单在不应该扩展其容器时

我尝试使用 this method (their fiddle) 使用 Bootstrap 启用可滚动菜单,但是通过这种方法,可滚动菜单会扩展其容器 - fiddle - 不可滚动菜单正确地不会这样做。

我怎样才能解决这个问题?也非常感谢有关与 Bootstrap 兼容的其他方法的建议!

作为参考,这里是第一个方法的小提琴中的 HTML:

<ul class="nav">
    <li class="dropdown">
        <a class="icon-key icon-white" data-toggle="dropdown" href="#" style=
        "font-weight: bold"></a>

        <div class="dropdown-menu" style="margin-left: 2em">
            <ul class="dropdown-menu">
                <!-- static non-scrollable menu header 1 -->
            </ul>
        </div>

        <div class="dropdown-menu" style="margin-left: 2em">
            <ul class="dropdown-menu">
                <li class="disabled">
                    <a href="#"><i class="icon-group"></i> <b>My Groups</b></a>
                </li>

                <li>
                    <div class="dropdown-menu scroll-menu scroll-menu-2x"
                    style="margin-left: 2em">
                        <ul class="dropdown-menu scroll-menu scroll-menu-2x">
                            <li>
                                <a href="#">User</a>
                            </li>

                            <li>
                                <a href="#">Administrators</a>
                            </li>

                            <li>
                                <a href="#">Some Other Group</a>
                            </li>
                        </ul>
                    </div>

                    <ul class="dropdown-menu scroll-menu scroll-menu-2x">
                        <!-- Additional menu items omitted for brevity -->
                    </ul>
                </li>
            </ul>
        </div>

        <div class="dropdown-menu" style="margin-left: 2em">
            <ul class="dropdown-menu">
                <!-- static non-scrollable menu header 2 -->
            </ul>
        </div>

        <div class="dropdown-menu" style="margin-left: 2em">
            <ul class="dropdown-menu">
                <li class="disabled">
                    <a href="#"><i class="icon-user"></i> <b>My Roles</b></a>
                </li>

                <li>
                    <div class="dropdown-menu scroll-menu scroll-menu-2x"
                    style="margin-left: 2em">
                        <ul class="dropdown-menu scroll-menu scroll-menu-2x">
                            <li>
                                <a href="#">Core Users</a>
                            </li>

                            <li>
                                <a href="#">Admin</a>
                            </li>

                            <li>
                                <a href="#">Some Other Role</a>
                            </li>
                        </ul>
                    </div>

                    <ul class="dropdown-menu scroll-menu scroll-menu-2x">
                        <!-- Additional menu items omitted for brevity -->
                    </ul>
                </li>
            </ul>
        </div>

        <div class="dropdown-menu" style="margin-left: 2em">
            <ul class="dropdown-menu">
                <!-- static non-scrollable menu footer -->
            </ul>
        </div>

        <ul class="dropdown-menu">
            <li class="disabled">
                <a href="#"><i class="icon-chevron-up pull-left"></i> <i class="icon-chevron-up pull-right"></i></a>
            </li>
        </ul>
    </li>
</ul>

和CSS:

/* So we wont impact the original bootstrap menu or it's pseudo call-out
arrow the menu is wrapped in a sub dropdown-menu with a chained scroll-menu */
ul.scroll-menu {
    position:relative;
    display:inherit!important;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    -moz-overflow-scrolling:touch;
    -ms-overflow-scrolling:touch;
    -o-overflow-scrolling:touch;
    overflow-scrolling:touch;
    top:0!important;
    left:0!important;
    width:100%;
    height:auto;
    max-height:500px;
    margin:0;
    border-left:none;
    border-right:none;
    -webkit-border-radius:0!important;
    -moz-border-radius:0!important;
    -ms-border-radius:0!important;
    -o-border-radius:0!important;
    border-radius:0!important;
    -webkit-box-shadow:none;
    -moz-box-shadow:none;
    -ms-box-shadow:none;
    -o-box-shadow:none;
    box-shadow:none
}
它也适用于 Bootstrap V4
对于 BS 3、4 和 4.5,请参阅此答案:stackoverflow.com/a/46891758/888472,因为接受的答案已过时。

Z
Zim

引导程序 5(2021 年更新)

BS 5 的下拉标记已更改,因为 data- 属性已更改为 data-bs-。但是,设置 max-height 仍然可以使下拉列表可滚动...

.dropdown-menu {
    max-height: 280px;
    overflow-y: auto;
}

https://codeply.com/p/shJzHGE84z

引导程序 4(2018 年更新)

BS 4 的下拉标记已更改,因为这些项目有自己的 dropdown-item 类。但是,设置 max-height 仍然可以使下拉列表可滚动...

.dropdown-menu {
    max-height: 280px;
    overflow-y: auto;
}

Bootstrap scrollable dropdown

Alternative horizontal menu for Bootstrap 4 using flexbox

Bootstrap 3(原始答案)

我认为您可以通过将必要的 CSS 属性添加到您的特殊可滚动菜单类来简化这一点。

CSS:

.scrollable-menu {
    height: auto;
    max-height: 200px;
    overflow-x: hidden;
}

HTML

       <ul class="dropdown-menu scrollable-menu" role="menu">
          <li><a href="#">Action</a></li>
          <li><a href="#">Another action</a></li>
          <li><a href="#">Something else here</a></li>
          <li><a href="#">Action</a></li>
            ..
          <li><a href="#">Action</a></li>
          <li><a href="#">Another action</a></li>
       </ul>

工作示例:https://codeply.com/p/ox7JC49vmT


如果有人更喜欢 Plunker 而不是 Bootply,那就是:plnkr.co/edit/3VhYW1?p=preview
滚动条会截断一些文本。我想知道最干净的方法是增加尺寸以容纳最宽的物品。
如果我想在下拉菜单中固定页眉和页脚怎么办
我使用 max-height: 100vh 来给出 100% 的高度
下面的答案建议使用 .pre-scrollable 应该是公认的分析器
A
Adrian Hedley

您可以在下拉菜单的 span 元素内使用 bootstrap 3 中可预滚动的内置 CSS 类,它可以立即工作而无需实现自定义 CSS。

 <ul class="dropdown-menu pre-scrollable">
                <li>item 1 </li>
                <li>item 2 </li>

 </ul>

这应该是 Bootstrap 3、4 和 4.5 的公认答案
您可能还想在 ul 中添加一种 overflow-y: auto 的样式,以便滚动条仅在需要时显示,否则此解决方案总是在菜单中添加滚动条,即使在不需要时也是如此
这在 Bootstrap 5(从 4.3 版开始)中不起作用。参考:github.com/twbs/bootstrap/pull/29135
b
blalond

对于 CSS,我发现在显示浏览器 chrome 时,手机横向 320 的最大高度为 180 更好。

.scrollable-menu {
    height: auto;
    max-height: 180px;
    overflow-x: hidden;
}

此外,要添加可见的滚动条,这个 CSS 应该可以解决问题:

.scrollable-menu::-webkit-scrollbar {
    -webkit-appearance: none;
    width: 4px;        
}    
.scrollable-menu::-webkit-scrollbar-thumb {
    border-radius: 3px;
    background-color: lightgray;
    -webkit-box-shadow: 0 0 1px rgba(255,255,255,.75);        
}

更改反映在此处:https://www.bootply.com/BhkCKFEELL


R
Rajeshwar Reddy

在 UL 标签的内联中做所有事情

<ul class="dropdown-menu scrollable-menu" role="menu" style="height: auto;max-height: 200px; overflow-x: hidden;">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li><a href="#">Action</a></li>
                ..
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
            </ul>

J
Jilani A

我只是在我的项目中解决了这个问题-

CSS 代码

.scroll-menu{
   min-width: 220px;
   max-height: 90vh;
   overflow: auto;
 }

HTML 代码

<ul class="dropdown-menu scroll-menu" role="menu">
   <li><a href="#">Action</a></li>
   <li><a href="#">Another action</a></li>
   <li><a href="#">Something else here</a></li>
   <li><a href="#">Action</a></li>
   ..
   <li><a href="#">Action</a></li>
   <li><a href="#">Another action</a></li>
</ul>

D
Darshak Malvi

我希望这段代码运行良好,试试这个。

添加css文件。

.scrollbar {
    height: auto;
    max-height: 180px;
    overflow-x: hidden;
}

HTML 代码:

<div class="col-sm-2  scrollable-menu" role="menu">
    <div>
   <ul>
  <li><a class="active" href="#home">Tutorials</a></li>
  <li><a href="#news">News</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#about">About</a></li>
  <li><a href="#news">News</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#about">About</a></li>
  <li><a href="#news">News</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#about">About</a></li>
  <li><a href="#news">News</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#about">About</a></li>
  <li><a href="#news">News</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#about">About</a></li>

    </ul>
   </div>
   </div>

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅