Bootstrap modal
secara otomatis menambahkan kelas modal-open
ke tubuh ketika dialog modal ditampilkan dan menghapusnya ketika dialog disembunyikan. Karena itu Anda dapat menambahkan yang berikut ke CSS Anda:
body.modal-open {
overflow: hidden;
}
Anda bisa berpendapat bahwa kode di atas adalah milik basis kode Bootstrap CSS, tetapi ini adalah perbaikan yang mudah untuk menambahkannya ke situs Anda.
Pembaruan 8 feb, 2013
Ini sekarang telah berhenti berfungsi di Twitter Bootstrap v. 2.3.0 - mereka tidak lagi menambahkan modal-open
kelas ke tubuh.
Solusinya adalah menambahkan kelas ke tubuh ketika modal akan ditampilkan, dan menghapusnya ketika modal ditutup:
$("#myModal").on("show", function () {
$("body").addClass("modal-open");
}).on("hidden", function () {
$("body").removeClass("modal-open")
});
Perbarui 11 Maret, 2013
Sepertinya modal-open
kelas akan kembali di Bootstrap 3.0, secara eksplisit untuk tujuan mencegah gulir:
Reintroduces .modal-open pada tubuh (jadi kita bisa nuke gulir di sana)
Lihat ini: https://github.com/twitter/bootstrap/pull/6342 - lihat bagian Modal .
modal-open
akan kembali di Bootstrap 3, jadi ketika diluncurkan, aman untuk menghapus kode di atas.Jawaban yang diterima tidak berfungsi di ponsel (setidaknya iOS 7 w / Safari 7) dan saya tidak ingin MOAR JavaScript berjalan di situs saya ketika CSS akan melakukannya.
CSS ini akan mencegah halaman latar belakang bergulir di bawah modal:
Namun, itu juga memiliki sedikit efek samping pada dasarnya bergulir ke atas.
position:absolute
mengatasi ini tetapi, memperkenalkan kembali kemampuan untuk menggulir di ponsel.Jika Anda tahu viewport Anda ( plugin saya untuk menambahkan viewport ke
<body>
), Anda bisa menambahkan toggle css untukposition
.Saya juga menambahkan ini untuk mencegah halaman yang mendasarinya dari melompat ke kiri / kanan ketika menampilkan / menyembunyikan modals.
jawaban ini adalah x-post.
sumber
position: fixed
di tubuh.Cukup sembunyikan body overflow dan itu membuat tubuh tidak menggulir. Saat Anda menyembunyikan modal, kembalikan ke otomatis.
Ini kodenya:
sumber
Anda bisa mencoba mengatur ukuran tubuh ke ukuran jendela dengan overflow: disembunyikan ketika modal terbuka
sumber
Anda harus melampaui jawaban dan akun @ charlietfl untuk bilah gulir, jika tidak, Anda dapat melihat dokumen reflow.
Membuka modal:
body
lebarnyabody
overflow kehidden
Secara eksplisit mengatur lebar tubuh dengan apa yang ada di langkah 1.
Menutup modal:
body
overflow keauto
Setel
body
lebar keauto
Terinspirasi oleh: http://jdsharp.us/jQuery/minute/calculate-scrollbar-width.php
sumber
$body.css("overflow", "auto");
di langkah terakhir :)Peringatan: Opsi di bawah ini tidak relevan dengan Bootstrap v3.0.x, karena menggulir dalam versi tersebut secara eksplisit terbatas pada modal itu sendiri. Jika Anda menonaktifkan acara roda, Anda mungkin secara tidak sengaja mencegah beberapa pengguna melihat konten dalam modals yang memiliki ketinggian lebih tinggi dari tinggi viewport.
Namun Pilihan Lain: Acara Roda
Acara gulir tidak dapat dibatalkan. Namun dimungkinkan untuk membatalkan roda mouse dan acara roda . Peringatan besarnya adalah bahwa tidak semua browser lawas mendukungnya, Mozilla baru-baru ini menambahkan dukungan untuk yang terakhir di Gecko 17.0. Saya tidak tahu penyebaran penuh, tetapi IE6 + dan Chrome mendukungnya.
Berikut cara memanfaatkannya:
JSFiddle
sumber
overflow:hidden
lebih baik untuk saat ini.sumber
Tidak dapat membuatnya berfungsi di Chrome hanya dengan mengubah CSS, karena saya tidak ingin halaman tersebut bergulir kembali ke atas. Ini bekerja dengan baik:
sumber
Coba yang ini:
itu berhasil untuk saya. (mendukung IE8)
sumber
position: fixed
.Semoga ini membantu...
sumber
Menambahkan kelas 'is-modal-open' atau memodifikasi gaya tag tubuh dengan javascript tidak apa-apa dan itu akan berfungsi sebagaimana mestinya. Tetapi masalah yang akan kita hadapi adalah ketika tubuh menjadi meluap: tersembunyi, itu akan melompat ke atas, (scrollTop akan menjadi 0). Ini akan menjadi masalah kegunaan nanti.
Sebagai solusi untuk masalah ini, alih-alih mengubah overflow tag tubuh: sembunyikan dengan tag html
sumber
Saya tidak yakin tentang kode ini, tetapi patut dicoba.
Di jQuery:
Seperti yang saya katakan sebelumnya, saya tidak 100% yakin tetapi coba saja.
sumber
Pada November 2017 Chrome Memperkenalkan properti css baru
overscroll-behavior: contain;
yang memecahkan masalah ini meskipun pada saat penulisan telah membatasi dukungan lintas browser.
lihat tautan di bawah untuk detail lengkap dan dukungan browser
sumber
Solusi terbaik adalah solusi css-only yang
body{overflow:hidden}
digunakan oleh sebagian besar jawaban ini. Beberapa jawaban menyediakan perbaikan yang juga mencegah "lompatan" yang disebabkan oleh scrollbar yang menghilang; Namun, tidak ada yang terlalu elegan. Jadi, saya menulis dua fungsi ini, dan tampaknya berfungsi dengan baik.Lihat jsFiddle ini untuk melihatnya digunakan.
sumber
open modal
lebar tombol. Chrome pada 8Banyak yang menyarankan "overflow: hidden" di badan, yang tidak akan berfungsi (setidaknya dalam kasus saya), karena itu akan membuat situs web gulir ke atas.
Ini adalah solusi yang berfungsi untuk saya (baik di ponsel dan komputer), menggunakan jQuery:
Ini akan membuat pengguliran modal untuk bekerja, dan mencegah situs web dari menggulir pada saat yang sama.
sumber
Anda dapat menggunakan logika berikut, saya mengujinya dan berfungsi (bahkan di IE)
sumber
Saya tidak 100% yakin ini akan bekerja dengan Bootstrap tetapi patut dicoba - ini bekerja dengan Remodal.js yang dapat ditemukan di github: http://vodkabears.github.io/remodal/ dan masuk akal untuk metode ini menjadi sangat mirip.
Untuk menghentikan melompat halaman ke atas dan juga mencegah pergeseran konten yang tepat, tambahkan kelas ke
body
saat modal dipecat dan setel aturan CSS ini:Ini
position:static
danheight:auto
yang bergabung untuk menghentikan lompatan konten ke kanan. Theoverflow-y:hidden;
berhenti halaman dari menjadi digulir balik modal tersebut.sumber
Berdasarkan biola ini: http://jsfiddle.net/dh834zgw/1/
cuplikan berikut (menggunakan jquery) akan menonaktifkan gulir jendela:
Dan di css Anda:
Sekarang ketika Anda menghapus modal, jangan lupa untuk menghapus kelas noscroll pada tag html:
sumber
overflow
seharusnya diaturhidden
? +1 meskipun ini bekerja untuk saya (menggunakanhidden
).Saya memiliki bilah sisi yang dihasilkan oleh hack kotak centang. Tetapi ide utamanya adalah untuk menyimpan dokumen scrollTop dan tidak mengubahnya saat menggulir jendela.
Saya hanya tidak suka halaman melompat ketika tubuh menjadi 'meluap: disembunyikan'.
sumber
Sayangnya tidak ada jawaban di atas yang memperbaiki masalah saya.
Dalam situasi saya, halaman web awalnya memiliki bilah gulir. Setiap kali saya mengklik modal, bilah gulir tidak akan hilang dan header akan bergerak ke kanan sedikit.
Kemudian saya mencoba menambahkan
.modal-open{overflow:auto;}
(yang direkomendasikan kebanyakan orang). Memang memperbaiki masalah: bilah gulir muncul setelah saya membuka modal. Namun, efek samping lain yang muncul adalah bahwa "latar belakang di bawah header akan bergerak sedikit ke kiri, bersama dengan bar panjang lain di belakang modal"Untungnya, setelah saya tambahkan
{padding-right: 0 !important;}
, semuanya diperbaiki dengan sempurna. Baik header dan latar belakang tubuh tidak bergerak dan modal masih menyimpan scrollbar.Semoga ini bisa membantu mereka yang masih terjebak dengan masalah ini. Semoga berhasil!
sumber
Sebagian besar bagian ada di sini, tetapi saya tidak melihat jawaban yang menyatukan semuanya.
Masalahnya tiga kali lipat.
(1) mencegah gulir halaman yang mendasarinya
(2) dan hapus bilah gulir
(3) bersihkan saat modal diberhentikan
Jika modal tidak layar penuh maka terapkan .modal binding ke overlay layar penuh.
sumber
Solusi saya untuk Bootstrap 3:
karena bagi saya satu-satunya
overflow: hidden
dibody.modal-open
kelas tidak mencegah halaman bergeser ke kiri karena aslinyamargin-right: 15px
.sumber
Saya hanya melakukannya dengan cara ini ...
Tetapi ketika scroller menghilang itu memindahkan semuanya dengan benar 20px, jadi saya menambahkan
langsung setelah itu.
Bekerja untukku.
sumber
Jika modal 100% tinggi / lebar "mouseenter / leave" akan bekerja dengan mudah mengaktifkan / menonaktifkan gulir. Ini benar-benar berhasil bagi saya:
sumber
bekerja untukku
sumber
Mengapa tidak melakukan itu seperti yang dilakukan Bulma? Ketika modal-aktif maka tambahkan ke html kelas mereka .is-terpotong yang melimpah: tersembunyi! Penting; Dan itu saja.
Sunting: Oke, Bulma memiliki bug ini, jadi Anda harus menambahkan juga hal-hal lain seperti
sumber
Karena bagi saya masalah ini disajikan terutama di iOS, saya memberikan kode untuk memperbaikinya hanya di iOS:
sumber
Tidak ada jawaban di atas yang bekerja dengan baik untuk saya. Jadi saya menemukan cara lain yang bekerja dengan baik.
Hanya menambahkan
scroll.(namespace)
pendengar dan setscrollTop
daridocument
ke terbaru dari nilai itu ...dan juga menghapus pendengar di skrip dekat Anda.
memperbarui
sepertinya, ini tidak berfungsi dengan baik pada chrome. ada saran untuk memperbaikinya?
sumber
Ini bekerja untuk saya:
sumber
Bagi mereka yang bertanya-tanya bagaimana cara mendapatkan acara gulir untuk modal bootstrap 3:
sumber