Лично 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>
Nota bene
Функция 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