私は新しいので、他の答えについてコメントすることはできません。
誰かがこの作業を行うための答えを探している場合(そして、現時点でこの作業を行うために必要と思われるため、javascriptを使用できます)、このアプローチは私にとってかなりうまくいき、モバイルの向きの変化も説明します。サンプルコードにはJqueryを使用していますが、vanillaJSで実行できるはずです。
-まず、スクリプトを使用して、デバイスがタッチしているかホバーしているかを検出します。ベアボーンの例:
if ("ontouchstart" in document.documentElement) {
document.body.classList.add('touch-device');
} else {
document.body.classList.add('hover-device');
}
これにより、後で高さスクリプトに使用できるデバイスの種類(ホバーまたはタッチ)に応じて、ボディ要素にクラスが追加されます。
-次に、このコードを使用して、ロード時および方向変更時のデバイスの高さを設定します。
if (jQuery('body').hasClass("touch-device")) {
//Loading height on touch-device
function calcFullHeight() {
jQuery('.hero-section').css("height", $(window).height());
}
(function($) {
calcFullHeight();
jQuery(window).on('orientationchange', function() {
// 500ms timeout for getting the correct height after orientation change
setTimeout(function() {
calcFullHeight();
}, 500);
});
})(jQuery);
} else {
jQuery('.hero-section').css("height", "100vh");
}
-タイムアウトが設定されているため、デバイスは向きを変更したときに新しい高さを正しく計算します。タイムアウトがない場合、私の経験では、高さは正しくありません。500msはやり過ぎかもしれませんが、私にとってはうまくいきました。
ブラウザーがCSS 100vhをオーバーライドする場合、ホバーデバイス上の-100vhはフォールバックです。