Scrollable Menu with Bootstrap - Menu memperluas wadahnya ketika seharusnya tidak

138

Saya mencoba metode ini ( biola mereka ) untuk mengaktifkan menu yang dapat digulir dengan Bootstrap, tetapi dengan pendekatan itu, menu yang dapat digulir memperluas wadahnya - biola - menu yang tidak dapat digulir, dengan benar, tidak melakukan ini.

Bagaimana saya bisa memperbaikinya? Saran tentang pendekatan lain yang kompatibel dengan Bootstrap juga dihargai!


Untuk referensi, berikut adalah HTML dari biola metode pertama:

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

Dan 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
}
eliashdezr
sumber
1
Ini juga berfungsi untuk Bootstrap V4
Tes3awy

Jawaban:

357

Saya pikir Anda dapat menyederhanakan ini dengan hanya menambahkan properti CSS yang diperlukan ke kelas menu khusus yang dapat digulir ..

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>

Contoh kerja: https://www.bootply.com/86116

Bootstrap 4

Contoh lain untuk Bootstrap 4 menggunakan flexbox

Zim
sumber
6
Jika seseorang lebih memilih Plunker daripada Bootply, ini dia: plnkr.co/edit/3VhYW1?p=preview
tanguy_k
Bilah gulir memotong sebagian teks. Saya bertanya-tanya apa cara terbersih adalah meningkatkan ukuran untuk mengakomodasi barang terlebar.
lintmouse
bagaimana jika saya ingin tetap header dan footer di menu dropdown
Inovasi
15
Saya menggunakan max-height: 100vh untuk memberikan tinggi 100%
Rob Sedgwick
Solusi yang sangat elegan dan super sederhana. +1
Gianluca Ghettini
49

Anda dapat menggunakan pre-scrollable class CSS bawaan di bootstrap 3 di dalam elemen span dari dropdown dan langsung bekerja tanpa mengimplementasikan custom css.

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

 </ul>
Adrian Hedley
sumber
13

Untuk CSS, saya menemukan bahwa ketinggian maksimal 180 lebih baik untuk ponsel landscape 320 ketika menampilkan browser chrome.

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

Juga, untuk menambahkan scrollbar yang terlihat, CSS ini harus melakukan trik:

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

Perubahannya tercermin di sini: https://www.bootply.com/BhkCKFEELL

blalond
sumber
1

Lakukan semua yang ada di inline tag 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>
Rajeshwar Reddy
sumber
1

Saya hanya memperbaiki masalah ini di proyek saya-

Kode CSS

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

Kode 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>
Jilani A
sumber
0

Saya harap kode ini berfungsi dengan baik, coba ini.

tambahkan file css.

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

Kode 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>
Darshak Malvi
sumber