Menu có thể cuộn với Bootstrap - Menu mở rộng vùng chứa của nó khi không nên


138

Tôi đã thử phương pháp này ( fiddle của họ ) để kích hoạt menu có thể cuộn bằng Bootstrap, nhưng với cách tiếp cận đó, menu có thể cuộn mở rộng vùng chứa của nó - fiddle - menu không thể cuộn, chính xác, không làm điều này.

Làm thế nào tôi có thể sửa lỗi này? Đề xuất về các phương pháp khác tương thích với Bootstrap cũng được đánh giá cao!


Để tham khảo, đây là HTML từ fiddle của phương thức đầu tiên:

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

Và 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
}

1
Nó cũng hoạt động cho Bootstrap V4
Tes3awy

Câu trả lời:


357

Tôi nghĩ bạn có thể đơn giản hóa điều này bằng cách chỉ cần thêm các thuộc tính CSS cần thiết vào lớp menu có thể cuộn đặc biệt của bạn ..

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>

Ví dụ hoạt động: https://www.bootply.com/86116

Bootstrap 4

Một ví dụ khác cho Bootstrap 4 sử dụng flexbox


6
Nếu một người thích Plunker hơn Bootply, thì đây là: plnkr.co/edit/3VhYW1?p=preview
tanguy_k

Thanh cuộn cắt một số văn bản. Tôi đang tự hỏi cách sạch nhất là tăng kích thước để chứa vật phẩm rộng nhất.
lintmouse

nếu tôi muốn tiêu đề và chân trang cố định trong menu thả xuống
Đổi mới

15
Tôi đã sử dụng chiều cao tối đa: 100vh để tăng chiều cao 100%
Rob Sedgwick

Giải pháp rất thanh lịch và siêu đơn giản. +1
Gianluca Ghettini

49

Bạn có thể sử dụng lớp CSS tích hợp có thể cuộn trước trong bootstrap 3 bên trong phần tử span của trình đơn thả xuống và nó hoạt động ngay lập tức mà không cần thực hiện css tùy chỉnh.

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

 </ul>

13

Đối với CSS, tôi thấy rằng chiều cao tối đa 180 là tốt hơn cho điện thoại di động 320 khi hiển thị chrome trình duyệt.

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

Ngoài ra, để thêm các thanh cuộn hiển thị, CSS này cần thực hiện mẹo:

.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);        
}

Các thay đổi được phản ánh tại đây: https://www.bootply.com/BhkCKFEELL


1

Làm mọi thứ trong nội tuyến của thẻ 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>

1

Tôi chỉ khắc phục vấn đề này trong dự án của tôi-

Mã CSS

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

Mã 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>

0

Tôi hy vọng mã này hoạt động tốt, hãy thử nó.

thêm tập tin css.

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

Mã 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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.