私たちのモバイルWebアプリケーションには、iOSアプリケーションでよく見られるような下向きのナビゲーションがあり、Safari 10.3リリース後は横向きのみでスクロールできます画面外のナビゲーション(フッター)。 position: fixed
と設定bottom: 0
また、古いSafariバージョンでは不可能でした。
スティッキーナビゲーション/フッターのスタイルは次のとおりです。
footer {
position: fixed;
height: 50px;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 0, 0, 0.7);
}
ポートレートモードでは、常に表示されます。
横向きモードでは、一番上のアドレスバーのサイズに合わせて画面外にスクロールできます。
誰かがそのような問題に遭遇しましたか?フッターを画面に表示したままにしておくと便利です。ありがとう
これは、実際のソリューションよりも回避策です。ただし、position: fixed
は長年モバイルデバイスの問題であり、この問題を解決する最善の方法は position: sticky
を使用することです。
sticky
は、指定されたオフセットしきい値がビューポートで満たされるまで、その親内でposition: relative
のように動作します。
From: 着陸を貼り付けます!位置:WebKitのスティッキーランド
ただし、position: sticky
はまだ完全にはサポートされていないため、以下も使用することをお勧めします。
position: sticky; /* currently in development for MS Edge */
position: -webkit-sticky;
position: -moz-sticky;
position: -o-sticky;
MS Edgeのステータス here を参照sticky
サポートステータス(ありがとう Frits )
html,
body {
height: 200%;
}
body {
background-image: linear-gradient(180deg, #ededed 0px, #ededed 9px, #000000 9px, #000000 10px);
background-size: 100% 10px;
}
footer {
position: sticky; /* currently in development for MS Edge */
position: -webkit-sticky;
position: -moz-sticky;
position: -o-sticky;
height: 50px;
top: 80%;
background: rgba(255, 0, 0, 0.7);
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<footer>
</footer>
</body>
</html>
ページの下部に固定要素を作成する別の方法があります。
_<body>
_要素(またはヘッダー、コンテンツ、フッターをラップするもの)を_display: flex; height: 100vh
_に設定します。次に、フッターを取得して_margin-top: auto
_に設定します。
HTML:
_<body>
<header>
</header>
<main>
<main>
<footer>
</footer>
</body>
_
CSS:
_html {
height: 100%;
}
body {
height: 100%;
display: flex;
flex-direction: column;
}
main {
flex: 1;
}
_
同じマークアップを持つ別のソリューションは、CSSグリッドを使用することです。
_html {
height: 100%;
}
body {
height: 100%;
display: grid;
grid-template-rows: auto 1fr auto;
}
_
両方の世界を最大限に活用するために、CSS Gridスタイルを@supports(display: grid){}
ラッパーでラップできます。グリッドがサポートされている場合、ブラウザはそれを取得し、そうでない場合はFlexboxにフォールバックします。
この手法を使用する最も良い方法は、重複するコンテンツやズームの問題に遭遇することはなく、開始から完全に応答することです。
このテーマに関するCSSトリックに関する記事があります。 https://css-tricks.com/couple-takes-sticky-footer/
ランドスケープモードへの切り替えで発生すること、およびサファリの「最小UI」との切り替えは、ウィンドウサイズ変更イベントです。固定要素のgetBoundingClientRect().bottom
をチェックして、_window.innerHeight
_より大きいかどうかを確認できます(これは、固定要素がウィンドウの下部にないことを意味します)。その場合は、bottom
要素のcssプロパティfixed
をelement.getBoundingClientRect().bottom - window.innerHeight
に設定できます。これにより、固定要素の位置が維持されます。これはユーザーには少しぎこちないように見えますが、これは画面の下部にある要素よりも優れています。
あなたのCSSの固定位置要素でこれを試してください:
transform:translate3d(0px, 0, 0);
-webkit-transform:translate3d(0px, 0, 0);
私も同じ問題を抱えていたので、テスターが満足するように修正しました。完璧なソリューションではありませんが、その仕事をしています。
パディングまたはマージンのある空の要素を追加します。
const _userAgent = navigator.userAgent.toLowerCase();
if (_userAgent.indexOf('safari') != -1) {
if (_userAgent.indexOf('chrome') == -1) {
$('.myelem').append('<div class="my-5"></div>');
}
}