IPhoneをIOS11にアップグレードした後、ログインウィンドウのランダムな位置にカーソルが表示されるようになりました。これはChrome/IOS11でも発生します。下のスクリーンショットでは、カーソルの位置が赤でマークされています。
ページの本文にposition: fixed
を追加してみてください。
イベンツの答えをピギーバック。 bootstrap modalを使用する場合、これをmain.jsファイルに追加できます。
var savedScrollPosition;
$(document).on('show.bs.modal', '.modal', function() {
savedScrollPosition = $(window).scrollTop();
});
$(document).on('hidden.bs.modal', '.modal', function() {
window.scrollTo(0, savedScrollPosition);
});
そして、これはあなたのCSSにあります。なぜなら、モーダルがポップするときはいつでも、モーダルオープンクラスがすでに追加されているからです:
body.modal-open {
position: fixed;
width: 100%;
}
助けてくれてありがとうybentz !!私はあなたのコメントに応じたでしょうが、私はまだそうする評判がありません。
個人的には、position: fixed
自動的に上にスクロールします。かなり迷惑です!
他のデバイスやバージョンへのペナルティを回避するためにこの修正は、iOSの適切なバージョンにのみ適用します。
javascript/jQueryの場合
$(document).ready(function() {
// Detect ios 11_x_x affected
// NEED TO BE UPDATED if new versions are affected
var ua = navigator.userAgent,
iOS = /iPad|iPhone|iPod/.test(ua),
iOS11 = /OS 11_0|OS 11_1|OS 11_2/.test(ua);
// ios 11 bug caret position
if ( iOS && iOS11 ) {
// Add CSS class to body
$("body").addClass("iosBugFixCaret");
}
});
CSSの場合
/* Apply CSS to iOS affected versions only */
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }
関数を変更して、クラス.inputModal
上部へのスクロールを回避するために、入力のあるモーダルのみが影響を受けます。
javascript/jQueryの場合
$(document).ready(function() {
// Detect ios 11_x_x affected
// NEED TO BE UPDATED if new versions are affected
(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);
// ios 11 bug caret position
if ( iOS && iOS11 ) {
$(document.body).on('show.bs.modal', function(e) {
if ( $(e.target).hasClass('inputModal') ) {
// Get scroll position before moving top
scrollTopPosition = $(document).scrollTop();
// Add CSS to body "position: fixed"
$("body").addClass("iosBugFixCaret");
}
});
$(document.body).on('hide.bs.modal', function(e) {
if ( $(e.target).hasClass('inputModal') ) {
// Remove CSS to body "position: fixed"
$("body").removeClass("iosBugFixCaret");
//Go back to initial position in document
$(document).scrollTop(scrollTopPosition);
}
});
}
})();
});
CSSの場合
/* Apply CSS to iOS affected versions only */
body.iosBugFixCaret.modal-open { position: fixed; width: 100%; }
HTMLの場合クラスinputModalをモーダルに追加します
<div class="modal fade inputModal" tabindex="-1" role="dialog">
...
</div>
Nota benejavascript関数が自己起動するようになりました
私は同じ問題を抱えていましたが、body
のposition: fixed
ソリューションはそれを解決するので、すばらしいことです。ただし、クラスをbody
に追加すると、ブラウザがページの上部に「ジャンプ」するため、ポップアップ/モーダルが閉じているときに削除すると、ユーザーが混乱する可能性があることに注意してください。 。
ポップアップ/モーダルがiOSで全画面の場合、修正するには、スクロール位置を保存してからposition: fixed
クラスを次のように追加します(jQueryを使用しますが Vanilla js ):
var savedScrollPosition = $(window).scrollTop()
$('body').addClass('has-fullscreen-modal')
そして、次のようにポップアップで復元します:
$('body').removeClass('has-fullscreen-modal')
window.scrollTo(0, savedScrollPosition)
そしてあなたのCSSは
body.has-fullscreen-modal {
position: fixed;
}
お役に立てば幸いです。
Ignacios Answerが問題を解決しました。オーバーレイヤー/モーダルを表示する場合、ボディに固定されたクラスを追加します。また、このルールをcssに追加します。
body.fixed{
position: fixed;
}