Чи працює переповнення: прихований додаток до <body> працює на iPhone Safari?


131

Чи overflow:hiddenзастосовується для <body>роботи на iPhone Safari? Здається, ні. Я не можу створити обгортку на всьому веб-сайті, щоб досягти цього ...

Ви знаєте рішення?

Приклад: у мене довга сторінка, і я просто хочу приховати вміст, який знаходиться під «складкою», і він повинен працювати на iPhone / iPad.


1
Відчайдушно шукаючи, щоб знайти собі відповідь на це.
mwilcox

Відповіді:


115

У мене було подібне питання, і я виявив, що звернення overflow: hidden;до обох htmlі bodyвирішило мою проблему.

html,
body {
    overflow: hidden;
} 

Для iOS 9, можливо, вам доведеться використовувати це замість цього: (Дякую подяку!)

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

12
Це не працює на iOS Safari. позиція: відносна також необхідна.
Кевін Бордерс

5
Так, додайте відносні та переповнені в html + body
wutang

3
це не працює на iOS 9, навіть використовуючи відношення положення на тілі та html
Чарльз Джон Томпсон III,

1
Слово попередження, переповнення, приховане на тег <html>, порушить подію прокрутки jQuery
Бретт Грегсон

2
Це не працює для мене на iOS 9, Safari. Тіло все ще прокручується, також після додавання position: relative.
Едо

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

3
СПАСИБІ. ТИ. У мене виникла велика проблема, коли елементи переходили із зовнішнього огляду, всередину. Буде дивна помилка, де вміст поширюється. Це було рішення для мене!
Ерік

48
У моєму випадку додавання "позиція: відносна" не допомогло, але додалося "позиція: виправлено".
LeastOne

1
Yip це спрацювало. Я будую сайт, де вони хочуть, щоб мобільний навіг переходив вміст, але коли він відкриється, вміст позаду навігації на задньому плані все ще прокручується. Інші відповіді з положенням, переливом та висотою також працювали, але з висотою сторінка підскакує до вершини, коли я відкриваю навігацію. Я думаю, що це унікально для моєї ситуації, але я просто подумав, що згадую його, якщо хтось із перекритими навичками має таку ж проблему.
moonunit7

Куди йде обгортка? Як це повна відповідь?
Кугель

8
Додавання фіксованого положення робить рішення це питання, але це робить сторінку стрибок до вершини, що погано для UX , якщо ви реалізуєте це в фоновому режимі , в той час як ви представите меню або модальний. Щоб зробити хороший UX, перед блокуванням потрібно зберегти позицію прокрутки сторінки та повторно застосувати її після розблокування.
Майк

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' ) );
Дейві

Це дійсно зробив галочку для мене!
D.Steinel

8

Була ця проблема сьогодні на iOS 8 та 9, і здається, що зараз нам потрібно додати висоту: 100%;

Тож додайте

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

4

Поєднання відповідей та коментарів тут і це подібне запитання тут працювало для мене.

Тож повідомлення в цілому відповідь.

Ось як потрібно розмістити обгортковий розділ навколо вмісту вашого веб-сайту, безпосередньо всередині <body>тегу.

 <!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
Це змушує сторінку прокручуватися до мене, коли модальний закривається.
Джейсон


4

Для мене це:

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

Не вистачило, я не працював на iOS на Safari. Я також повинен був додати:

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%;
}

toggleClass цей клас для вирізання сторінки

коли ви вимкнете цей клас, перший рядок зателефонує смузі прокрутки назад


0

Так, це пов’язано з новими оновленнями сафарі, які зараз порушують ваш макет, якщо ви використовуєте переповнення: приховано, щоб подбати про очищення дівок.


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.

Невелика редакція: можливо, вам буде краще використовувати переповнення: прокрутіть так, щоб дві прокрутки пальця спрацювали.


0

Чому б не обернути вміст, який не хочеться відображати в елементі, класом і не встановити цей клас display:noneу таблицю стилів, призначену лише для iphone та інших портативних пристроїв?

<!--[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 пікс (висота вікна мобільного огляду в ландшафтному просторі приблизно від 300 до 500 пікс.)

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.