modal bootstrap menghapus scroll bar


Jawaban:


115

Ini adalah fitur, kelas modal-openditambahkan ke HTML bodysaat Anda menampilkan modal, dan dihapus saat Anda menyembunyikannya.

Ini membuat bilah gulir menghilang sejak bootstrap css mengatakan

.modal-open {
    overflow: hidden;
}

Anda dapat menimpanya dengan menentukan

.modal-open {
    overflow: scroll;
}

di css Anda sendiri .


bisakah kamu lebih spesifik?
El Dude

1
Menambahkan beberapa detail lebih lanjut. Lebih baik sekarang?
flup

14
Lebih tepat menggunakan overflow-y: scroll, yang menurut saya lebih baik menjawab maksud dari pertanyaan OP. Menggunakan overflow: scroll akan menambahkan scrollbar horizontal ke bagian bawah layar.
Scott

1
perfect, bekerja dengan modals angular-strap juga, cukup memasukkan CSS di atas <style></style>ke dalam templateUrlsehingga tidak mempengaruhi modals lain dalam aplikasi.
davidkonrad

2
Gunakan overflow: inherit; sebagai gantinya. Dengan cara ini modal tidak menghapus gulir saat Anda memiliki gulir dan tidak menambahkan gulir saat Anda tidak memilikinya
Alisson Alvarenga

32

Saya pikir mewarisi lebih baik daripada menggulir karena ketika Anda membuka modal, itu akan selalu terbuka dengan gulir, tetapi ketika Anda tidak memiliki gulungan, Anda akan mendapatkan masalah yang sama. Jadi saya hanya melakukan ini:

.modal-open {
  overflow: inherit;
}

Inilah jawaban sebenarnya. scroll overflow masih mempengaruhi beberapa elemen dalam kasus saya.
Coisox

25

Saya dulu

.modal-open {
  overflow-y: scroll;
}

Dalam hal ini Anda menghindari untuk menampilkan bilah gulir horizontal


kita bisa menggabungkannya dengan jawaban @Alisson Alvarenga dan menggunakan overflow-y: inherit;
duodvk

23

Lebih baik menggunakan overflow-y: scroll dan hapus padding dari body, modal bootstrap menambahkan padding ke body halaman.

.modal-open {
  overflow:hidden;
  overflow-y:scroll;
  padding-right:0 !important;
}

Kompatibel dengan browser IE: Browser IE melakukan hal yang sama secara default.


1
Terima kasih. Selain itu, jika modal popup perlu di-scroll dan orang tua harus tetap diam .modal-body {max-height: calc (100vh - 210px); overflow-y: otomatis; } .modal-open {overflow: hidden; overflow-y: gulir; padding-right: 0! penting; }
Oracular Man

9

Terima kasih Tuhan saya menemukan posting ini! Saya menarik rambut saya mencoba mencari cara untuk mendapatkan kembali scrollbar saya saat menutup jendela menggunakan tautan dekat saya sendiri. Saya mencoba saran untuk CSS tetapi tidak berfungsi dengan benar. Setelah membaca

class modal-open ditambahkan ke badan HTML saat Anda menampilkan modal, dan dihapus saat Anda menyembunyikannya. - @flup

Saya datang dengan solusi menggunakan jquery, jadi jika ada orang lain yang memiliki masalah yang sama dan saran di atas tidak berfungsi -

<script>
            jQuery(document).ready(function () {
jQuery('.closeit').click(function () {
 jQuery('body').removeClass('modal-open');
                });
            });
        </script>

Saya memiliki masalah di mana saya menimpa acara hide.bs.modal sehingga saya dapat mengeksekusi beberapa kode khusus ketika modal disembunyikan, tetapi yang tidak saya sadari adalah itu menghentikan kelas modal-terbuka agar tidak dihapus dari tubuh - karenanya bilah gulir saya tidak kembali saat menutup modal khusus yang satu ini. Saya tidak menghapus kelas modal-open secara manual dalam kode hide.bs.modal saya dan itu memperbaiki masalah itu.
Jim

1
Anda hanya perlu menambahkan data-dismiss="modal"atribut ke tautan Anda alih-alih melakukan sesuatu yang khusus seperti ini. Bootstrap akan melakukan semua tindakan penutupan yang sesuai saat tautan itu diklik.
nollidge

1
data-reject = "modal" tidak berfungsi dalam kasus saya karena saya memanggil fungsi di pengontrol sudut. Solusi jQuery yang disarankan bekerja sangat baik untuk saya.
gianni

5

Saya baru saja bermain dengan 'fitur' modals Bootstrap ini. Sepertinya .modalkelas punyaoverflow-y:auto; Jadi pembungkus modal mendapatkan bilah gulirnya sendiri ketika modal itu sendiri menjadi tinggi.

Jika Anda selalu menginginkan scrollbar (desainer sering melakukannya) Pertama atur badan

body {
    overflow-y:scroll;
}

Lalu tangani .modal-open

.modal-open .modal {
    overflow-y:scroll; /* Force a navbar on .modal */
}

.modal-open .topnavbar-wrapper {
    padding-right:17px; /* Noticed that right aligned navbar content got overlapped by the .modal scrollbar */
}

Biarkan scrollbar menonaktifkan pada tubuh tidak tersentuh dalam kasus ini

Semua jawaban lain di halaman ini terus membuat konten saya melonjak.

Perhatian!

Meskipun solusi ini bekerja untuk saya sepanjang waktu, kemarin saya mengalami masalah dalam menggunakan perbaikan ini ketika modal dapat diseret dan menjadi besar agar sesuai dengan layar (vertikal). Mungkin ada hubungannya dengan position:stickyelemen yang saya tambahkan?


Ketika saya menambahkan body {overflow-y: scroll;}, masalah saya telah terpecahkan. Terima kasih Pak.
FrenkyB

1

Lebih baik jika Anda akan membuat file css Anda sendiri untuk menyesuaikan bagian tertentu dari bootsrap Anda.

Jangan Ubah file css dari bootstrap karena itu akan mengubah semua yang ada di bootstrap Anda setelah Anda menggunakannya di bagian lain halaman Anda.

Jika halaman Anda agak panjang, secara otomatis akan menyediakan scroll bar. Dan ketika modal dibuka, itu akan menyembunyikan bilah gulir karena itulah yang dilakukan bootstrap sebagai default.

Untuk menghindari menyembunyikannya saat modal dibuka, cukup timpa dengan meletakkan kode css (di bawah) pada file css Anda sendiri.

.modal-open {
    overflow: scroll;
}

hanya sebaliknya ...

.modal-open {
    overflow: hidden;
}

3
Tampaknya ini berisi informasi yang sama dengan jawaban lain untuk pertanyaan ini. Jika jawaban Anda berbeda, edit untuk mengklarifikasi apa yang sebenarnya berbeda. Harap hanya tambahkan jawaban baru jika Anda memiliki sesuatu yang baru.
Jeffrey Bosboom

1
Ini berisi jawaban yang sama tetapi memiliki cara lain untuk menjelaskannya. Terkadang, pemahaman bergantung pada bagaimana penjelasannya.
NormanCabilatazan

1
Tidak semua pembaca bisa mendapatkan ide yang sama. Lebih baik memberikan cara lain untuk menjelaskannya agar mereka mengerti dengan jelas.
NormanCabilatazan

1

Selain itu, jika modal popup perlu menggulir dengan konten di dalamnya dan orang tua harus tetap diam, tambahkan berikut ini ke Custom.css Anda (mengganti css)

.modal-body {
    max-height: calc(100vh - 210px);
    overflow-y: auto;
}
.modal-open {
    overflow: hidden;
    overflow-y: scroll;
    padding-right: 0 !important;
}

0

modal bootstrap menambahkan padding setelah terbuka sehingga Anda dapat mencoba kode ini di css Anda sendiri

.modal-open {
    padding: 0 !important;
}

0

Hal ini mungkin disebabkan bahwa modal pertama (saat ditutup) menghapus kelas modal-buka dari elemen tubuh dan yang kedua tidak akan menambahkannya kembali saat memicu modal-buka.

Dalam hal ini saya akan menggunakan acara untuk memeriksa apakah modal telah ditutup / disembunyikan sepenuhnya dan membuka yang lain

let modal1 = $('.modal1);
let modal2 = $('.modal2);
$modal1.on('hidden.bs.modal', function (e) {
   $modal2.modal('show');
});

Ini akan menunggu sampai modal pertama ditutup untuk memastikan modal-open dihapus dari tubuh dan ditambahkan kembali saat terbuka.


0

Saya sendiri baru saja mengalami masalah ini, dan menemukan pertanyaan ini dengan cepat membantu saya memahami apa yang menyebabkan perilaku tersebut. Jadi terima kasih.

Namun, menurut saya solusi CSS ini agak janggal. Kecuali, jika Anda secara khusus ingin menyimpan scrollbar (meskipun saya tidak dapat memikirkan alasannya).

Pada dasarnya Bootstrap menerapkan padding-right ke elemen tertentu untuk mengimbangi penghapusan scrollbar.

Oleh karena itu, yang perlu Anda lakukan adalah meletakkan pembungkus ekstra dengan bantalan nol-tepat di sekitar elemen bermasalah Anda (dan memindahkan kelas yang ditargetkan ke atasnya).

yaitu perubahan dari ini ...

<div class="fixed-top p-1 bg-dark">
    ...this content will move as padding will be modified...
</div>

... untuk ini...

<div class="fixed-top p-0 bg-dark">
    <div class="p-1">
        ...this content won't move...
    </div>
</div>

0

Satu-satunya jawaban yang berhasil bagi saya adalah sebagai berikut:

.modal-open {
  padding-right: 0 !important;
}
html {
  overflow-y: scroll !important;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.