<body>에 적용된 overflow : hidden이 iPhone Safari에서 작동합니까?


131

iPhone Safari overflow:hidden에서 <body>작동 합니까 ? 그렇지 않은 것 같습니다. 나는 그것을 달성하기 위해 전체 웹 사이트에 래퍼를 만들 수 없습니다 ...

당신은 해결책을 알고 있습니까?

예 : 긴 페이지가 있고 단순히 "폴드"아래에있는 컨텐츠를 숨기고 싶다면 iPhone / iPad에서 작동해야합니다.


1
이것에 대한 답을 찾기 위해 필사적으로 검색합니다.
mwilcox

답변:


115

나는 비슷한 문제가 있었다 및 적용 것을 발견 overflow: hidden;모두 htmlbody내 문제를 해결했다.

html,
body {
    overflow: hidden;
} 

iOS 9의 경우 대신 이것을 사용해야 할 수도 있습니다 .

html,
body {
    overflow: hidden;
    position: relative;
    height: 100%;
}

12
iOS Safari에서는 작동하지 않습니다. 위치 : 친척도 필요합니다.
Kevin Borders

5
html + body에 상대 및 오버플로 모두 추가
wutang

3
이 경우에도 몸과 HTML에 위치를 사용하여, 아이폰 OS 9에서 작동하지 않습니다
찰스 존 톰슨 III

1
경고, 한마디로 <html> 태그에 숨겨져 jQuery의 스크롤 이벤트가 중단됩니다
Brett Gregson

2
iOS 9, Safari에서는 작동하지 않습니다. 추가 한 후에도 본문은 여전히 ​​스크롤 가능 position: relative합니다.
Edo

87
body {
  position:relative; // that's it
  overflow:hidden;
}

3
감사. 당신. 요소가 뷰포트 외부에서 내부로 전환 될 때 큰 문제가있었습니다. 내용이 확장되는 이상한 버그가 발생합니다. 이것은 나를위한 해결책이었습니다!
Eric

48
제 경우에는 "position : relative"를 추가해도 도움이되지 않지만 "position : fixed"를 추가하면 효과가있었습니다.
LeastOne

1
그렇습니다. 모바일 탐색이 콘텐츠를 넘길 수있는 사이트를 만들고 있지만 배경이 열리면 탐색 뒤의 콘텐츠가 여전히 스크롤됩니다. 위치, 오버플로 및 높이에 대한 다른 답변 도 효과가 있었지만 높이를 사용하면 탐색을 열 때 페이지가 맨 위로 이동합니다. 내 상황에 고유 한 것 같지만 중첩 된 탐색 기능을 가진 다른 사람이 동일한 문제를 겪을 경우를 언급한다고 생각했습니다.
moonunit7

포장지는 어디로 갑니까? 이것이 어떻게 완전한 답입니까?
Kugel

8
고정 된 위치를 추가 하지 주소에게 문제를, 그러나 당신이 메뉴 또는 모달을 제시하면서 배경에서 이것을 구현하는 경우 UX에 대한 나쁜 상단에 페이지 도약을 수 있습니다. 좋은 UX를 만들려면 잠금 위치 전에 페이지의 스크롤 위치를 저장 한 다음 잠금을 해제 한 후 다시 적용해야합니다.
mike

27

여기에 나열된 일부 솔루션에는 탄성 스크롤을 늘릴 때 이상한 결함이있었습니다. 내가 사용한 것을 고치려면 :

body.lock-position {
  height: 100%;
  overflow: hidden;
  width: 100%;
  position: fixed;
}

출처 : http://www.teamtownend.com/2013/07/ios-prevent-scrolling-on-body/


4
이 기능은 훌륭 position: relative하지만 ( 내 경우에는보다 효과적입니다 ), 기본 스타일을 복원 한 후 스크롤 위치가 손실됩니다 (예 : 메뉴 닫기).
jmarceli

1
스크롤 위치의 경우 js (이 예제에서는 jquery)를 사용하여 다음과 같이 할 수 있습니다. // on menu open // save window pos $('body').attr( 'data-pos', $(window).scrollTop() ) ; // ... // on menu close // scroll to saved window pos $( window ).scrollTop( $('body').attr( 'data-pos' ) );
Davey

그것은 정말로 나를 위해 진드기를했다!
D.Steinel

8

오늘 iOS 8 & 9 에서이 문제가 있었으며 이제 높이를 추가해야합니다 .100 %;

그래서 추가

html,
body {
  position: relative;
  height: 100%;
  overflow: hidden;
}

4

여기에 답변과 의견을 결합하고 여기에 비슷한 질문이 있습니다. 나에게 도움이되었습니다.

전체 답변으로 게시하십시오.

<body>태그 내에서 사이트 콘텐츠 주위에 래퍼 div를 배치하는 방법은 다음과 같습니다 .

 <!DOCTYPE HTML>
 <html>
 <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <!-- other meta and head stuff here -->
 <head>
 <body>
     <div class="wrapper">
         <!-- Your site content here -->
     </div>
 </body>
 </html>

아래와 같이 랩퍼 클래스를 작성하십시오.

.wrapper{
    position:relative; //that's it
    overflow:hidden;
}

나는 또한 이 대답에서 아이디어를 얻었습니다 .

그리고이 대답은 또한 생각할만한 음식을 얻었습니다. 아마도 데스크톱과 장치 모두에서 똑같이 잘 작동 할 것입니다.


이것이 나를위한 해결책이었습니다.
Roel Magdaleno

1
그러면 모달이 닫힐 때 페이지가 맨 위로 스크롤됩니다.
Jason

4

Safari 브라우저에서 작동합니다.

html,
body {
  overflow: hidden;
  position: fixed
}

4

나를 위해 :

height: 100%; 
overflow: hidden; 
width: 100%; 
position: fixed;

충분하지 않아서 Safari의 iOS에서 작동하지 않았습니다. 또한 추가해야했습니다.

top: 0;
left: 0;
right: 0;
bottom: 0;

잘 작동하도록 잘 작동합니다 :)


2

내가 함께 일했다 <body><div class="wrapper">

팝업이 열리면 ...

<body> 높이 100 % 및 오버플로 : 숨김

<div class="wrapper"> 위치 : 상대적; 오버플로 : 숨김; 높이 : 100 %;

JS / jQuery를 사용하여 페이지의 실제 스크롤 위치를 가져 와서 값을 본문에 데이터 속성으로 저장합니다.

그런 다음 .wrapper DIV 의 스크롤 위치로 스크롤합니다 (창에 없음)

내 해결책은 다음과 같습니다.

JS / jQuery :

// when popup opens

$('body').attr( 'data-pos', $(window).scrollTop()); // get actual scrollpos
$('body').addClass('locked'); // add class to body
$('.wrapper').scrollTop( $('body').attr( 'data-pos' ) ); // let wrapper scroll to scrollpos

// when popup close

$("body").removeClass('locked');
$( window ).scrollTop( $('body').attr( 'data-pos' ));

CSS :

body.locked {position:relative;overflow:hidden;height:100%;}
body.locked .wrapper {position:relative;overflow:hidden;height:100%;}

데스크톱 및 모바일 (iOS) 양쪽에서 잘 작동합니다.

팁과 개선은 환영합니다 :)

건배!


1
html {
  position:relative;
  top:0px;
  left:0px;
  overflow:auto;
  height:auto
}

이것을 CSS에 기본값으로 추가하십시오.

.class-on-html{
  position:fixed;
  top:0px;
  left:0px;
  overflow:hidden;
  height:100%;
}

페이지를 자르려면이 클래스를 설정하십시오.

이 클래스를 끄면 첫 번째 줄이 스크롤 막대를 다시 호출합니다.


0

예, 이것은 div 삭제를 처리하기 위해 overflow : hidden을 사용하면 사파리의 새로운 업데이트와 관련이 있습니다.


10
이것에 대해 자세히 설명하거나 출처를 인용 할 수 있습니까? 이 답변은 정확할 수도 있지만 그다지 도움이되지는 않습니다.
pjmorse

0

적용되지만 DOM 내의 특정 요소에만 적용됩니다. 예를 들어, 테이블, td 또는 다른 요소에서는 작동하지 않지만 <DIV> 태그에서는 작동합니다.
예 :

<body>
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>

iOS 4.3에서만 테스트되었습니다.

사소한 편집 : overflow : scroll을 사용하는 것이 더 좋을 수 있으므로 두 손가락 스크롤이 작동합니다.


0

클래스가있는 요소에 표시하지 않으려는 컨텐츠를 래핑하고 해당 클래스를 display:noneiPhone 및 기타 핸드 헬드 장치 전용 스타일 시트 로 설정 하십시오.

<!--[if !IE]>-->
<link media="only screen and (max-device-width: 480px)" href="small-device.css" type= "text/css" rel="stylesheet">
<!--<![endif]-->

0

여기 내가 한 일이 있습니다. 몸체 y 위치를 확인한 다음 몸을 고정시키고 상단을 해당 위치의 음수로 조정하십시오. 반대로 본문을 정적으로 만들고 스크롤을 이전에 기록한 값으로 설정합니다.

var body_x_position = 0;

function disable_bk_scrl(){

    var elb = document.querySelector('body');

    body_x_position = elb.scrollTop;
    // get scroll position in px

    var body_x_position_m = body_x_position*(-1);
    console.log(body_x_position);

    document.body.style.position = "fixed";

    $('body').css({ top: body_x_position_m });

}

function enable_bk_scrl(){  

    document.body.style.position = "static";

    document.body.scrollTo(0, body_x_position);

    console.log(body_x_position);
}

-3

본체 높이를 300 픽셀 미만으로 변경하기 만하면됩니다.

JS

$( '.offcanvas-toggle' ).on( 'click', function() {
    $( 'body' ).toggleClass( 'offcanvas-expanded' );
});

CSS

.offcanvas-expended { /* this is class added to body on click */
    height: 200px;
}
.offcanvas {
    height: 100%;
}

매우 우아한 솔루션은 아니며 선택한 특정 픽셀보다 큰 iOS 기기에서 문제가 발생할 수 있습니다. 다른 솔루션을 사용해야합니다.
Badrush
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.