modal bootstrap menghapus scroll bar

94

Saat saya memicu tampilan modal di halaman saya, ini memicu bilah gulir menghilang. Ini adalah efek yang mengganggu karena halaman latar belakang mulai bergerak saat modal bergerak masuk / menghilang. Apakah ada obat untuk efek itu?

El Dude
sumber
1
Jawaban yang Kompatibel dengan Browser: stackoverflow.com/a/47807685/7186739
Model Super

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 .

flup
sumber
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;
}
Alisson Alvarenga
sumber
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

Mauro
sumber
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.

Model Super
sumber
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>
Kaya
sumber
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?

Pemberi makan otak
sumber
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;
}
Norman Cabilatazan
sumber
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;
}
Pria yang Luar Biasa
sumber
0

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

.modal-open {
    padding: 0 !important;
}
mehdigriche
sumber
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.

pengguna1508136
sumber
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>
Matt
sumber
0

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

.modal-open {
  padding-right: 0 !important;
}
html {
  overflow-y: scroll !important;
}
Martijn Hiemstra
sumber