スマホのランディングページ用にid="head"としたdiv要素を置いています
ランディングなのでCSSで100vhで良いだろうと思い以下のようにしました
CSS
1#head { 2 height: 100vh; 3}
結果は以下のようになります
しかしこれでは実際にスマホで見るとバーが邪魔してハンバーガーメニューの操作ができません
そこで、高さを88vhにしたら、SafariとChromeはぴったりになりました
![
しかしForeFoxは以下のように上下のバーの高さを差し引いた高さを「更に」88%にした高さに再調整してきて次のページ(セクション)が見えかけてしまいます
結局、FireFoxだけはheightを100vhに設定するとバーを差し引いた高さに合わせてピッタリ収まります
もちろんそうするとSafariとChromeはナビバーの下にハンバーガーメニューが隠れてしまいます。
バーが出現しているときのユーザー領域の高さは”visualViewport.height”で取得できるとかと聞いたので強制的にjQueryでページのロード時に、heightをその値にセットしてみました。結果はSafariとChromeはあいかわらずぴったりなのですがFireFoxだけは次ページは見えることはなくなったのですが、上下のバーを差し引いた高さよりランディングページが少しだけ(30pxほど)短くなっており、可視領域を埋め尽くせていない部分は白塗り状態です。表示されているランディングページと下のナビバーの間に白帯がある感じです。結局、次のページ(セクション)が見えかけている状態と殆ど変わらないのです。この白い部分の要素が何なのかは検証できていないのですが・・・
JavaScript
1$('#head.').css('min-height', visualViewport.height)
これはどう解決することができるでしょうか?
なお、ブラウザのスニッフィングは禁止されてて使えません
色々考えるとやはりFireFoxの挙動が正解と思います。上下に出ているブラウザのバーはユーザーには触ることはできませんから、ViewPortの100%の高さである”100vh”は、画面の高さから上下のバーを高さを引いたものにすべきです。なので、おかしいのはSafariとChromeということになると思います。ただ実際にはこうやって挙動が違うので何かしら対策しないといけないので、有効なものを教えていただきたくお願いいたします。
検証環境
スマホ:iPhone11 iOS 14.4.1
Safari
GoogleChrome 87.0.4280.77
FireFox 32.1