bootstrap modal loại bỏ thanh cuộn


94

Khi tôi kích hoạt chế độ xem phương thức trong trang của mình, nó sẽ kích hoạt thanh cuộn biến mất. Đó là một hiệu ứng khó chịu vì trang nền bắt đầu di chuyển khi phương thức di chuyển vào / biến mất. Có cách chữa trị nào cho hiệu quả không?


1
Trình duyệt tương thích trả lời: stackoverflow.com/a/47807685/7186739
Super Model

Câu trả lời:


115

Đây là một tính năng, lớp modal-openđược thêm vào HTML bodykhi bạn hiển thị phương thức và bị xóa khi bạn ẩn nó.

Điều này làm cho thanh cuộn biến mất vì css bootstrap nói

.modal-open {
    overflow: hidden;
}

Bạn có thể ghi đè điều này bằng cách chỉ định

.modal-open {
    overflow: scroll;
}

trong css của riêng bạn .


Anh lam ơn cụ thể chut hơn được không?
El Dude,

1
Đã thêm một số chi tiết. Tốt hơn rồi?
flup

14
Sẽ thích hợp hơn khi sử dụng tràn-y: scroll, mà tôi nghĩ giải quyết tốt hơn mục đích của câu hỏi OP. Sử dụng phần tràn: cuộn sẽ thêm một thanh cuộn ngang vào cuối màn hình.
Scott

1
hoàn hảo, cũng hoạt động với các phương thức dây đeo góc cạnh, có thể chỉ cần đưa CSS ở trên vào <style></style>bên trong templateUrlđể nó không ảnh hưởng đến các phương thức khác trong ứng dụng.
davidkonrad

2
Sử dụng tràn: kế thừa; thay thế. Bằng cách này, phương thức không loại bỏ cuộn khi bạn có cuộn và không thêm cuộn khi bạn không có
Alisson Alvarenga

31

Tôi nghĩ rằng kế thừa tốt hơn cuộn vì khi bạn mở modal, nó sẽ luôn mở bằng cuộn, nhưng khi bạn không có bất kỳ cuộn nào, bạn sẽ gặp vấn đề tương tự. Vì vậy, tôi chỉ làm điều này:

.modal-open {
  overflow: inherit;
}

Đây là câu trả lời thực sự. cuộn tràn vẫn có hiệu lực một số phần tử trong trường hợp của tôi.
Coisox

26

Tôi đã sử dụng

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

Trong trường hợp này, bạn tránh hiển thị thanh cuộn ngang


chúng ta có thể kết hợp nó với câu trả lời của @Alisson Alvarenga và sử dụng tràn-y: inherit;
duodvk

23

Tốt hơn là sử dụng tràn-y: cuộn và xóa phần đệm khỏi nội dung, phương thức bootstrap đã thêm phần đệm vào nội dung trang.

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

Trình duyệt IE Tương thích: Trình duyệt IE hoạt động tương tự theo mặc định.


1
Cám ơn. Ngoài ra, nếu cửa sổ bật lên phương thức cần cuộn và phần tử gốc cần phải giữ nguyên .modal-body {max-height: calc (100vh - 210px); tràn-y: auto; } .modal-open {tràn: ẩn; tràn-y: cuộn; padding-right: 0! important; }
Oracular Man

9

Cảm ơn Chúa, tôi đã xem qua bài viết này! Tôi đang vò đầu bứt tóc để cố gắng tìm cách lấy lại thanh cuộn khi đóng cửa sổ bằng cách sử dụng liên kết đóng của chính mình. Tôi đã thử các đề xuất cho CSS nhưng nó không hoạt động bình thường. Sau khi đọc

class modal-open được thêm vào nội dung HTML khi bạn hiển thị phương thức và bị xóa khi bạn ẩn nó. - @flup

Tôi đã đưa ra một giải pháp bằng cách sử dụng jquery, vì vậy, trong trường hợp bất kỳ ai khác gặp vấn đề tương tự và các đề xuất ở trên không hoạt động -

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

Tôi đã gặp sự cố khi ghi đè sự kiện hide.bs.modal để có thể thực thi một số mã tùy chỉnh khi phương thức bị ẩn, nhưng điều tôi không nhận ra là điều đó đã ngăn lớp mở phương thức bị xóa khỏi phần thân - do đó thanh cuộn của tôi không quay lại khi đóng một phương thức cụ thể này. Tôi sẽ không xóa lớp phương thức mở theo cách thủ công trong mã hide.bs.modal của mình và nó khắc phục được sự cố đó.
Jim,

1
Bạn chỉ cần thêm một data-dismiss="modal"thuộc tính vào liên kết của mình thay vì làm bất cứ điều gì tùy chỉnh như thế này. Bootstrap sẽ thực hiện tất cả các hành động đóng thích hợp khi liên kết đó được nhấp vào.
nollidge

1
data -miss = "modal" không hoạt động trong trường hợp của tôi vì tôi đang gọi một hàm trong bộ điều khiển góc. Giải pháp jQuery được đề xuất hoạt động rất tốt đối với tôi.
gianni

5

Tôi chỉ đang chơi với 'tính năng' này của các phương thức Bootstrap. Có vẻ như .modallớp có overflow-y:auto;Vì vậy, trình bao bọc phương thức có thanh cuộn của riêng mình khi phương thức tự trở nên cao.

Nếu bạn luôn muốn có một thanh cuộn (các nhà thiết kế thường làm) Đầu tiên hãy đặt phần thân

body {
    overflow-y:scroll;
}

Sau đó xử lý .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 */
}

Để nguyên tính năng tắt thanh cuộn trên nội dung trong trường hợp này

Tất cả các câu trả lời khác trên trang này tiếp tục làm cho nội dung của tôi nhảy vọt.

Đứng lên!

Mặc dù giải pháp này đã hoạt động với tôi mọi lúc, nhưng ngày hôm qua tôi đã gặp sự cố khi sử dụng bản sửa lỗi này khi phương thức có thể kéo và lớn để vừa với màn hình (theo chiều dọc). Nó có thể liên quan đến position:stickycác yếu tố tôi đã thêm?


Khi tôi thêm nội dung {tràn-y: scroll;}, vấn đề của tôi đã được giải quyết. Cảm ơn ngài.
FrenkyB

1

Tốt hơn nếu bạn tạo tệp css của riêng mình để tùy chỉnh một phần nhất định của giày cao cổ của bạn.

Không thay đổi tệp css của bootstrap vì nó sẽ thay đổi mọi thứ trong bootstrap của bạn khi bạn sử dụng nó trong các phần khác của trang.

Nếu trang của bạn hơi dài, nó sẽ tự động cung cấp một thanh cuộn. Và khi phương thức được mở, nó sẽ ẩn thanh cuộn vì đó là những gì bootstrap làm mặc định.

Để tránh ẩn nó khi mở modal, chỉ cần ghi đè nó bằng cách đặt mã css (bên dưới) vào tệp css của riêng bạn.

.modal-open {
    overflow: scroll;
}

ngược lại ...

.modal-open {
    overflow: hidden;
}

3
Điều này dường như chứa cùng thông tin với câu trả lời khác cho câu hỏi này. Nếu câu trả lời của bạn khác, hãy chỉnh sửa câu trả lời đó để làm rõ câu trả lời chính xác là gì. Vui lòng chỉ thêm câu trả lời mới nếu bạn có điều gì đó mới.
Jeffrey Bosboom

1
Nó chứa cùng một câu trả lời nhưng có cách giải thích khác. Đôi khi, sự hiểu biết phụ thuộc vào cách nó được giải thích.
NormanCabilatazan

1
Không phải tất cả người đọc đều có thể có cùng một ý tưởng. Tốt hơn nên đưa ra cách giải thích khác để họ hiểu rõ ràng.
NormanCabilatazan

1

Ngoài ra, nếu cửa sổ bật lên phương thức cần cuộn với nội dung bên trong và phần chính cần nằm yên, hãy thêm phần sau vào Custom.css của bạn (ghi đè css)

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

0

phương thức bootstrap thêm một phần đệm khi nó mở ra để bạn có thể thử mã này trong css của riêng bạn

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

0

Điều này có thể là do phương thức thứ nhất (khi đóng) loại bỏ modal-open class khỏi phần tử body và phương thức thứ hai sẽ không thêm nó trở lại khi kích hoạt modal-open.

Trong trường hợp này, tôi sẽ sử dụng sự kiện để kiểm tra xem phương thức đã được đóng / ẩn hoàn toàn hay chưa và mở một phương thức khác

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

Điều này sẽ đợi cho đến khi phương thức thứ nhất được đóng lại để đảm bảo rằng phương thức mở được xóa khỏi nội dung và được thêm lại khi mở.


0

Tôi vừa gặp sự cố này và việc tìm thấy câu hỏi này nhanh chóng giúp tôi hiểu nguyên nhân gây ra hành vi. Vì vậy, cảm ơn.

Tuy nhiên, tôi thấy các cách giải quyết CSS này hơi không phù hợp. Trừ khi, tức là bạn muốn giữ lại các thanh cuộn (mặc dù tôi không thể nghĩ ra lý do cho điều đó).

Về cơ bản Bootstrap đang áp dụng padding-right cho các phần tử nhất định để bù đắp cho việc loại bỏ thanh cuộn.

Do đó, tất cả những gì bạn cần làm là đặt thêm một trình bao bọc không có phần đệm bên phải xung quanh phần tử có vấn đề của bạn (và di chuyển lớp đang được nhắm mục tiêu lên đó).

tức là thay đổi từ cái này ...

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

... đến đây ...

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