モバイルSafariで利用可能な表示可能スペースを計算する正しい方法は何ですか?表示領域とは、Webアプリが実際に利用できる画面の量を意味します。つまり、ウィンドウの高さからアドレスバーとブックマークバーを差し引いたものです。
iOS 7はアドレスバーの非表示を防止し、ビューポートの高さを適切に考慮する必要があります。
window.innerWidth
およびwindow.innerHeight
はビューポートの幅と高さを示します。
私はこれが5歳の投稿であることを知っていますが、私が知ることができるように、この問題はまだ続きます。私の回避策:CSSでスタイル設定されているページでHTML要素を使用します:_.el{ height:100vh; }
_ jQueryを使用してJavaScriptにピクセル単位で高さを取得します:$('.el').height();
このような要素を実際に使用していない場合は、ビューポートを測定することのみを目的として、その場で作成することができます。
_var vh = $('<div style="height:100vh"></div>"').appendTo('body').height();
$('body div:last-child').remove();
_
ルートコンテナー要素のCSS height
(rootElement
としましょう)をビューポートの高さに設定します。
.root-element {
height: 100vh;
}
次に、ページがレンダリングされたら、このコードを実行してrootElement
高さをビューポートの高さからブラウザーのUIバーのサイズを差し引いたものに更新します(たとえば、iOS Safariでは、上部のアドレスバー、下部のナビゲーションバー…)。 :
const rootElement = document.querySelector(".root-element")
const viewPortH = rootElement.getBoundingClientRect().height;
const windowH = window.innerHeight;
const browserUiBarsH = viewPortH - windowH;
rootElement.style.height = `calc(100vh - ${browserUiBarsH}px)`;
このソリューションは、ルートコンテナーのサイズを使用可能なサイズに設定しますが、ウィンドウのサイズが変更されたときに(例えば、デスクトップで使用した場合)ブラウザーがrootElement
の高さを調整する可能性も維持します。