Mimo że atrybut CSS {position:fixed;}
wydaje się (głównie) działać na nowszych urządzeniach z systemem iOS, możliwe jest, że urządzenie będzie dziwne i awaryjne {position:relative;}
od czasu do czasu i bez przyczyny lub powodu. Zwykle wyczyszczenie pamięci podręcznej pomaga, dopóki coś się nie stanie i nie powtórzy się dziwactwo.
W szczególności od samego Apple przygotowującego treści internetowe na iPada :
Safari na iPadzie i Safari na iPhonie nie mają okien z możliwością zmiany rozmiaru. W Safari na iPhonie i iPadzie rozmiar okna jest ustawiony zgodnie z rozmiarem ekranu (bez elementów sterujących interfejsu użytkownika Safari) i użytkownik nie może go zmienić. Aby poruszać się po stronie internetowej, użytkownik zmienia poziom powiększenia i położenie rzutni, dotykając dwukrotnie lub szczypiąc, aby powiększyć lub pomniejszyć, lub dotykając i przeciągając, aby przesunąć stronę. Gdy użytkownik zmienia poziom powiększenia i położenie rzutni, robi to w widocznym obszarze zawartości o stałym rozmiarze (to jest w oknie). Oznacza to, że elementy strony internetowej, których pozycja jest „ustalona” w widoku, mogą znaleźć się poza widocznym obszarem zawartości, poza ekranem.
Co ironiczne, urządzenia z Androidem nie wydają się mieć tego problemu. Jest również całkowicie możliwe do użycia {position:absolute;}
w odniesieniu do tagu body i nie ma żadnych problemów.
Znalazłem główną przyczynę tego dziwactwa; że jest to zdarzenie przewijania, które nie gra ładnie, gdy jest używane w połączeniu ze znacznikiem HTML lub BODY. Czasami nie lubi odpalać wydarzenia lub będziesz musiał poczekać, aż zdarzenie zamachu zwoju zostanie zakończone, aby odebrać wydarzenie. W szczególności rzutnia jest ponownie rysowana pod koniec tego zdarzenia, a stałe elementy można ponownie umieścić w innym miejscu w rzutni.
Oto, co robię: ( unikaj korzystania z widoku i trzymaj się DOM! )
<html>
<style>
.fixed{
position:fixed;
}
.scrollableDiv{
position:relative;
overflow-y:scroll;
}
.viewportSizedBody{
position:relative;
overflow:hidden;
}
</style>
<body class="viewportSizedBody">
<div id="myFixedContainer" class="fixed">
This part is fixed.
</div>
<div id="myScrollableBody" class="scrollableDiv">
This part is scrollable.
</div>
</body>
<script type="text/javascript" src="{your path to jquery}/jquery-1.7.2.min.js"></script>
<script>
var theViewportHeight=$(window).height();
$('.viewportSizedBody').css('height',theViewportHeight);
$('#myScrollableBody').css('height',theViewportHeight);
</script>
</html>
W gruncie rzeczy spowoduje to, że BODY będzie miał rozmiar okna roboczego i nie będzie można go przewijać. Przewijalny DIV zagnieżdżony w środku będzie się przewijał jak normalnie BODY (bez efektu swing, więc przewijanie zatrzymuje się po dotknięciu). Ustalony DIV pozostaje stały bez zakłóceń.
Na marginesie, wysoka z-index
wartość ustalonego DIV jest ważna, aby przewijalny DIV wydawał się za nią. Zwykle dodaję zdarzenia zmiany rozmiaru i przewijania okna również w celu zapewnienia zgodności z różnymi przeglądarkami i alternatywnymi rozdzielczościami ekranu.
Jeśli wszystko inne zawiedzie, powyższy kod będzie również działał z ustawionymi i przewijalnymi DIV ustawionymi na {position:absolute;}
.