Twitter 부트 스트랩 스크롤 가능 모달


84

작업중인 프로젝트에 트위터 부트 스트랩을 사용하고 있습니다.

나는 그 안에 약간 더 긴 형태의 모달 창이 있고 창이 너무 작아지면 모달이 스크롤되지 않는 것을 좋아하지 않았습니다 (스크롤 할 수없는 내 페이지에서 사라진 경우).

이 문제를 해결하기 위해 다음 CSS를 사용했습니다.

.modal {
    overflow-y:auto;
    max-height:90%;
    margin-top:-45%;
}

이것은 Chrome에서 원하는 방식으로 정확히 작동합니다 (즉, 창이 충분히 크면 양식이 전체 크기이지만 창이 축소되면 모달이 축소되고 스크롤 가능해집니다). 문제는 IE에서 모달이 화면 밖에 있다는 것입니다. 누구든지이 문제에 대한 더 나은 해결책이 있습니까?

내 예제는 tinyhousemap.com에서 찾을 수 있습니다 (모달을 표시하려면 탐색 창에서 '지도에 항목 추가'를 클릭하세요).

감사


이 솔루션을 찾아서 사용하고 있습니다. 배경 콘텐츠가 아닌 부트 스트랩 모달 만 스크롤 할 수 있다는 점에서 매우 매끄 럽습니다. github.com/aroc/Bootstrap-Scroll-Modal
Richard Adleta 2013-04-18

답변:


137

아래 솔루션은 어떻습니까? 그것은 나를 위해 일했습니다. 이 시도:

.modal .modal-body {
    max-height: 420px;
    overflow-y: auto;
}

세부:

  1. .modal 클래스에서 overflow-y: auto;또는 제거 overflow: auto;(중요)
  2. 수업 max-height: 400px;에서 제거 .modal(중요)
  3. 추가 max-height: 400px;로 .modal .modal 바디 (또는 이제까지 무엇을, 할 수있다 420px이하,하지만보다 더 갈 것입니다 450px)
  4. 추가 overflow-y: auto;.modal .modal-body

완료, 본문 만 스크롤됩니다.


5
나는이 정도까지 나름대로 얻었지만, 가장 낮은 공통 분모보다는 창문이 허용하는 한 높이를 원했습니다. 그러나 지정 max-height: 80%;은 작동하지 않으며 스크롤하는 대신 확장됩니다. 조정하려면 크기 조정 이벤트를 사용해야 $(".modal")[0].style.maxHeight합니까?
Peter Wone 2014 년

18

저는 jQuery 만 사용하여 작은 솔루션을 수행했습니다.

먼저 <div class="modal-body">"ativa-scroll"이라는 추가 클래스를 추가해야 하므로 다음과 같이됩니다.

<div class="modal-body ativa-scroll">

이제 JS 로딩 근처에이 코드를 페이지에 넣으십시오.

<script type="text/javascript">
  $(document).ready(ajustamodal);
  $(window).resize(ajustamodal);
  function ajustamodal() {
    var altura = $(window).height() - 155; //value corresponding to the modal heading + footer
    $(".ativa-scroll").css({"height":altura,"overflow-y":"auto"});
  }
</script>

나는 나를 위해 완벽하게 작동하며 반응 형으로도 작동합니다! :)


1
훌륭한 솔루션은,하지만 난 최대 높이로 높이를 변경할 것
올렉

1
또한 $ ( '. modal'). on ( 'show.bs.modal', function (e) {}); 사이징 기능을 트리거합니다. 이렇게하면 모든 크기 조정 및로드가 아닌 필요한 경우에만 높이가 계산됩니다. CSS를 계산 / 적용하기 전에 현재 모달이 사용자 지정 스크롤 높이를 활용하는지 이벤트의 함수 내에서 확인하면됩니다. 즉 var scrollModal = $ ( '. modal-body.modal-scroll', this); (scrollModal.length) ... 경우
로버트 와델

이것은 부트 스트랩 2 또는 3입니까?
스파이

17
/* Important part */
.modal-dialog{
    overflow-y: initial !important
}
.modal-body{
    max-height: calc(100vh - 200px);
    overflow-y: auto;
}

이것은 JS 코드가없는 Bootstrap 3에서 작동하며 반응합니다.

출처


그 부트 스트랩 2 또는 3입니까? 문제는 대부분의 부트 스트랩 2 게시
스파이

@spy이 부트 스트랩 3입니다
기욤 Renoult

8

부트 스트랩의 시도 및 재정의 :

 .modal {
position: fixed;

와:

.modal {
position: absolute;

그것은 나를 위해 일했습니다.


1
IPad에서 정렬 문제가 발생합니다
Oleg

4

나는 또한 추가했다

.modal { position: absolute; }

스타일 시트에 추가하여 대화 상자를 스크롤 할 수 있지만 사용자가 긴 페이지의 맨 아래로 이동 한 경우 모달은 표시되는 영역의 맨 위에 숨겨 질 수 있습니다.

나는 이것이 더 이상 부트 스트랩 3에서 문제가 아니라는 것을 이해하지만 업그레이드 할 때까지 비교적 빠른 수정을 찾고 모달을 열기 전에 위와 다음을 호출하는 것으로 끝났습니다.

$('.modal').css('top', $(document).scrollTop() + 50);

FireFox, Chrome, IE10 8 및 7 (내가 손에 넣은 브라우저)에서 행복해 보입니다.


1

당신의 모달은 파이어 폭스에서 숨겨지고 있으며, 이는 일반 스타일 시트 안에있는 음의 여백 선언 때문입니다.

.modal {
    margin-top: -45%; /* remove this */
    max-height: 90%;
    overflow-y: auto;
}

음수 여백을 제거하면 모든 것이 잘 작동합니다.


margin-top을 제거하면 모달이 개선되어 IE에서 화면에서 멀리 떨어져 있지 않지만 이제는 특정 창 크기에서 화면의 중앙 (수직)에만 있습니다. 다른 모든 크기는 모달이 화면의 상단 또는 하단에서 넘칩니다.
Dan dot net

1
@Dandotnet 모달은 자동으로 창 상단에서 50 % 위치를 지정합니다. 10 %와 같이 낮은 값으로 덮어 쓸 수 있지만 음수 값을 추가하면 IE에서와 같이 화면에서 사라집니다. 그건 그렇고, 파이어 폭스에서도 마찬가지입니다.
Andres Ilich 2012 년

1

를 사용 .modal {overflow-y: auto;}하는 경우 본문 이 이미 넘 쳤을 때 페이지 오른쪽에 추가 스크롤바를 생성 합니다.

이에 대한 해결 방법은 일시적으로 body 태그 에서 오버플 로를 제거 하고 modal overflow-yauto로 설정하는 것 입니다.

예:

$('.myModalSelector').on('show.bs.modal', function () {

        // Store initial body overflow value
        _initial_body_overflow = $('body').css('overflow');

        // Let modal be scrollable
        $(this).css('overflow-y', 'auto');
        $('body').css('overflow', 'hidden');


    }).on('hide.bs.modal', function () {

        // Reverse previous initialization
        $(this).css('overflow-y', 'hidden');
        $('body').css('overflow', _initial_body_overflow);
});

1

@grenoult의 CSS 솔루션 (대부분 작동)의 문제는 키보드가 팝업 될 때 (즉, 모달 대화 상자에서 입력을 클릭 할 때) 완전히 반응하고 모바일에서 화면 크기가 변경되고 모달 대화 상자가 크기가 변경되고 방금 클릭 한 입력을 숨길 수 있으므로 입력중인 내용을 볼 수 없습니다.

나에게 더 나은 해결책은 다음과 같이 jquery를 사용하는 것입니다.

$(".modal-body").css({ "max-height" : $(window).height() - 212, "overflow-y" : "auto" });

창 크기 변경에 반응하지 않지만 어쨌든 그렇게 자주 발생하지 않습니다.


1

.modal-body 요소에서 max-height와 함께 "vh"메트릭을 사용하여이 문제를 극복 할 수있었습니다. 70vh는 내 용도에 적합하다고 생각했습니다. 그런 다음 overflow-y를 자동으로 설정하여 필요할 때만 스크롤되도록합니다.

.modal-body {
   overflow-y: auto;
   max-height: 70vh;
}

0

이 중 어느 것도 예상대로 작동하지 않습니다. 올바른 방법은 위치를 변경하는 것입니다 : 고정 위치 : .modal 클래스의 절대 위치


2
결론은 무엇에 근거합니까?
Rafael Herscovici 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.