부트 스트랩 모달은 스크롤 막대를 제거합니다.


답변:


115

이것은 기능입니다. 클래스 modal-openbody모달을 표시 할 때 HTML에 추가되고 숨기면 제거됩니다.

이렇게하면 부트 스트랩 CSS가 다음과 같이 스크롤바가 사라집니다.

.modal-open {
    overflow: hidden;
}

다음을 지정하여이를 재정의 할 수 있습니다.

.modal-open {
    overflow: scroll;
}

에서 자신의 CSS.


좀 더 구체적으로 말씀해 주시겠습니까?
El Dude

1
더 자세한 정보를 추가했습니다. 더 나은 지금?
flup

14
overflow-y : scroll을 사용하는 것이 더 적절하며 OPs 질문의 의도를 더 잘 해결한다고 생각합니다. overflow : scroll을 사용하면 화면 하단에 수평 스크롤바가 추가됩니다.
Scott

1
완벽하고 앵귤러 스트랩 모달에서도 작동하며 위의 CSS를 <style></style>내부 templateUrl에 포함하여 앱의 다른 모달에 영향을주지 않도록 할 수 있습니다.
davidkonrad

2
오버플로 사용 : 상속; 대신. 당신이 스크롤이 있고이 없을 때 스크롤을 추가하지 않는 경우가 스크롤을 제거하지 않는 모달이 방법
알리슨 Alvarenga

31

모달을 열면 항상 스크롤로 열리기 때문에 상속스크롤 보다 낫다고 생각 하지만 스크롤이 없으면 같은 문제가 발생합니다. 그래서 저는 이렇게합니다.

.modal-open {
  overflow: inherit;
}

이것이 진정한 답입니다. 오버플로 스크롤은 여전히 ​​내 경우 일부 요소에 영향을 미칩니다.
Coisox

26

나는 사용했다

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

이 경우 가로 스크롤 막대를 표시하지 않습니다.


@Alisson Alvarenga의 답변과 결합하여 overflow-y : inherit;
duodvk

23

overflow-y : scroll을 사용하고 본문에서 패딩을 제거하는 것이 더 낫습니다. 부트 스트랩 모달은 페이지 본문에 패딩을 추가했습니다.

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

IE 브라우저 호환 : 기본적으로 동일한 작업을 수행하는 IE 브라우저.


1
고마워. 또한 모달 팝업이 스크롤되어야하고 부모가 여전히 남아 있어야하는 경우 .modal-body {max-height : calc (100vh-210px); overflow-y : 자동; } .modal-open {오버플로 : 숨김; overflow-y : 스크롤; padding-right : 0! 중요; }
Oracular Man apr

9

이 게시물을 건너서 하나님 감사합니다! 내 자신의 닫기 링크를 사용하여 창을 닫을 때 스크롤바를 되 돌리는 방법을 찾으려고 머리를 뽑아 내고있었습니다. CSS에 대한 제안을 시도했지만 제대로 작동하지 않았습니다. 읽고 나서

modal-open 클래스는 모달을 표시 할 때 HTML 본문에 추가되고 숨길 때 제거됩니다. -@flup

jquery를 사용하여 해결책을 찾았으므로 다른 사람이 동일한 문제를 가지고 있고 위의 제안이 작동하지 않는 경우를 대비하십시오.

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

모달이 숨겨 졌을 때 일부 사용자 지정 코드를 실행할 수 있도록 hide.bs.modal 이벤트를 재정의하는 문제가 있었지만 모달 열기 클래스가 본문에서 제거되는 것을 막았다는 사실을 깨닫지 못했습니다. 따라서이 특정 모달을 닫을 때 스크롤 막대가 다시 나타나지 않았습니다. hide.bs.modal 코드에서 modal-open 클래스를 수동으로 제거하지 않고이 문제를 해결합니다.
Jim

1
data-dismiss="modal"이와 같은 사용자 정의를 수행하는 대신 링크에 속성 을 추가하기 만하면 됩니다. 해당 링크를 클릭하면 부트 스트랩이 모든 적절한 닫기 작업을 수행합니다.
nollidge

1
앵귤러 컨트롤러에서 함수를 호출하고 있기 때문에 data-dismiss = "modal"이 제 경우에는 작동하지 않습니다. 제안 된 jQuery 솔루션은 저에게 매우 잘 작동합니다.
gianni

5

저는 Bootstrap 모달의 '기능'을 가지고 놀았습니다. 보인다 .modal클래스가있다overflow-y:auto; 모달 자체가 높게 될 때 모달 래퍼가 자신의 스크롤 막대를 얻을 수 있도록.

항상 스크롤바를 원하는 경우 (디자이너가 자주 사용) 먼저 본문 설정

body {
    overflow-y:scroll;
}

그런 다음 처리 .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 */
}

이 경우 본문에서 스크롤바를 비활성화 한 상태로 둡니다.

이 페이지의 다른 모든 답변은 계속해서 내 콘텐츠를 뛰어 넘었습니다.

주의!

이 솔루션이 항상 저에게 효과가 있었지만 어제 모달을 드래그 할 수 있고 화면에 맞게 크게 할 때이 수정을 사용하는 데 문제가있었습니다 (세로). position:sticky내가 추가 한 요소 와 관련이있을 수 있습니까?


body {overflow-y : scroll;}을 추가하면 문제가 해결되었습니다. 감사합니다.
FrenkyB

1

부 트랩의 특정 부분을 사용자 정의하기 위해 자신의 CSS 파일을 만드는 것이 좋습니다.

페이지의 다른 부분에서 사용하면 부트 스트랩의 모든 내용이 변경되므로 부트 스트랩의 css 파일을 변경하지 마십시오.

페이지가 다소 길면 자동으로 스크롤 막대를 제공합니다. 모달이 열리면 부트 스트랩이 기본값으로 수행하는 작업이므로 스크롤 막대를 숨 깁니다.

모달이 열릴 때 숨기지 않으려면 자신의 CSS 파일에 CSS 코드 (아래)를 넣어 무시하면됩니다.

.modal-open {
    overflow: scroll;
}

그 반대의 경우도 마찬가지입니다 ...

.modal-open {
    overflow: hidden;
}

3
이 질문에 대한 다른 답변과 동일한 정보가 포함 된 것 같습니다. 대답이 다른 경우 정확히 무엇이 다른지 명확히하기 위해 편집하십시오. 새로운 답변이있는 경우에만 새로운 답변을 추가하십시오.
제프리 Bosboom

1
그것은 같은 대답을 포함하지만 그것을 설명하는 다른 방법이 있습니다. 때때로 이해는 그것이 설명되는 방법에 달려 있습니다.
NormanCabilatazan 2015 년

1
모든 독자가 동일한 아이디어를 얻을 수있는 것은 아닙니다. 그들이 명확하게 이해할 수 있도록 다른 방법으로 설명하는 것이 좋습니다.
NormanCabilatazan 2015 년

1

또한 모달 팝업이 내부 콘텐츠와 함께 스크롤해야하고 부모가 여전히 남아 있어야하는 경우 Custom.css에 다음을 추가합니다 (css 재정의).

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

0

부트 스트랩 모달이 열리면 패딩을 추가하므로이 코드를 자신의 CSS에서 시도 할 수 있습니다.

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

0

이것은 아마도 첫 번째 모달 (닫 혔을 때)이 본문 요소에서 모달 열기 클래스를 제거하고 두 번째 모달이 모달 열기를 트리거 할 때 다시 추가하지 않기 때문일 수 있습니다.

이 경우 이벤트를 사용하여 모달이 완전히 닫히거나 숨겨져 있는지 확인하고 다른

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

이것은 첫 번째 모달이 닫힐 때까지 기다려서 modal-open이 body에서 제거되고 열릴 때 다시 추가되었는지 확인합니다.


0

나는 방금이 문제가 있었고이 질문을 발견하면 행동의 원인을 이해하는 데 빠르게 도움이되었습니다. 감사합니다.

그러나 이러한 CSS 해결 방법은 약간 우아하지 않습니다. 즉, 스크롤바를 유지하려는 경우가 아니라면 (그 이유를 생각할 수는 없지만).

기본적으로 Bootstrap은 스크롤바 제거를 보완하기 위해 특정 요소에 패딩 오른쪽을 적용합니다.

따라서 문제가되는 요소 주위에 패딩이 0 인 추가 래퍼를 추가하고이를 대상으로하는 클래스를 이동하기 만하면됩니다.

즉, 이것에서 변경 ...

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

... 이에...

<div class="fixed-top p-0 bg-dark">
    <div class="p-1">
        ...this content won't move...
    </div>
</div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.