Особисто position: fixed
прокрутіть до початку автоматично . Досить прикро!
Щоб уникнути покарання за інші пристрої та версії, я застосовую це виправлення лише до відповідних версій iOS.
** ВЕРСІЯ 1 - Виправлено всі способи **
Для 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");
}
});
Для CSS
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }
** ВЕРСІЯ 2 - Лише для вибраних модалів **
Я змінив функцію на запуск лише для вибраних модалів із класом .inputModal
Слід впливати лише на модалі з входами, щоб уникнути прокрутки вгору.
Для 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);
}
});
}
})();
});
Для CSS
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }
Для HTML
Додайте клас inputModal до модального
<div class="modal fade inputModal" tabindex="-1" role="dialog">
...
</div>
Примітка.
Функція javascript тепер викликається самостійно
** ОНОВЛЕННЯ iOS 11.3 - Виправлено помилку 😃🎉 **
Починаючи з iOS 11.3, помилка була виправлена. Там немає необхідності тестування для OS 11_
вiOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);
Але будьте обережні, оскільки iOS 11.2 все ще широко використовується (станом на квітень 2018 року). Подивитися
статистика 1
стати 2