Osobiście position: fixed
przewiń do góry automatycznie . Dość irytujące !
Aby uniknąć karania innych urządzeń i wersji , stosuję tę poprawkę tylko do odpowiednich wersji iOS.
** WERSJA 1 - poprawka wszystkich modali **
W przypadku pliku javascript / jQuery
$(document).ready(function() {
var ua = navigator.userAgent,
iOS = /iPad|iPhone|iPod/.test(ua),
iOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);
if ( iOS && iOS11 ) {
$("body").addClass("iosBugFixCaret");
}
});
Dla CSS
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }
** WERSJA 2 - tylko wybrane modały **
Zmodyfikowałem funkcję, aby uruchamiała się tylko dla wybranych modali z klasą .inputModal
Należy wpływać tylko na modały z danymi wejściowymi, aby uniknąć przewijania do góry.
W przypadku pliku javascript / jQuery
$(document).ready(function() {
(function iOS_CaretBug() {
var ua = navigator.userAgent,
scrollTopPosition,
iOS = /iPad|iPhone|iPod/.test(ua),
iOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);
if ( iOS && iOS11 ) {
$(document.body).on('show.bs.modal', function(e) {
if ( $(e.target).hasClass('inputModal') ) {
scrollTopPosition = $(document).scrollTop();
$("body").addClass("iosBugFixCaret");
}
});
$(document.body).on('hide.bs.modal', function(e) {
if ( $(e.target).hasClass('inputModal') ) {
$("body").removeClass("iosBugFixCaret");
$(document).scrollTop(scrollTopPosition);
}
});
}
})();
});
Dla CSS
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }
Dla kodu HTML
Dodaj klasę inputModal do pliku modal
<div class="modal fade inputModal" tabindex="-1" role="dialog">
...
</div>
Nota bene
Funkcja javascript wywołuje się teraz automatycznie
** AKTUALIZACJA iOS 11.3 - Poprawiono błąd 😃🎉 **
Od iOS 11.3 błąd został poprawiony. Nie ma potrzeby testowania OS 11_
wiOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);
Ale uważaj, ponieważ iOS 11.2 jest nadal szeroko stosowany (stan na kwiecień 2018). Widzieć
stat 1
stat 2