質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

3630閲覧

スマホブラウザのアドレスバー、ナビバー考慮した高さ指定について

Fujiman

総合スコア41

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2021/03/22 07:27

編集2021/03/22 13:42

スマホのランディングページ用に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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2021/03/22 07:33

次ページ、とは、セカンドビューのことでしょうか? それとも、次ページを読み込んで表示させている、ということでしょうか?
Fujiman

2021/03/22 09:57

すみません、説明不足で。次のページとは同一htmlファイル内の「次のsection」です
guest

回答1

0

これは、本当に難しい問題です。
多くのフロントエンドエンジニアが、泣かされているのが現状です。
その中で、下記工夫が、ある程度の妥協点となるかと。

css

1#head { 2 box-sizing: border-box; 3 height: 100vh; 4 padding-bottom: 5vw; /* ステータスバー分の高さの分。正しい数値は自分で確認してください */ 5} 6ロゴとメニューボタンの親セレクタ { 7 /* 他プロパティは省略 */ 8 bottom: 5vw; 9}

あとは、セーフエリアの数値分を適用させるCSSの組み方もありますので、
今回の問題解決に大いに参考になるでしょう。
(私は使いこなせたことがないので、すみません)

env() - CSS: カスケーディングスタイルシート | MDN

投稿2021/03/22 07:44

miyabi_takatsuk

総合スコア9555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fujiman

2021/03/22 10:31 編集

ありがとうございます。やはり悩ましい問題なのですか。なお、教えていただいたenv()でpaddingを#headに以下のように適用しても、ChromeとSafariは上下のバーを無視した全領域がセーフと判定しているようで、100vhと指定したときと同じになります。逆にFireFoxはぴったりおさまります。おそらく、いつものようにMozillaが正しいのでしょうね。妥協点で示していただいたように数値の調整でとりあえずはやっていこうと思います。少なくとも悩ましい問題であることが確認できただけ進歩でした。 #head{ height: 100vh; width: 100vw; padding: env(safe-area-inset-top, 20px) env(safe-area-inset-right, 20px) env(safe-area-inset-bottom, 20px) env(safe-area-inset-left, 20px); }
miyabi_takatsuk

2021/03/22 14:24 編集

セーフエリアだといきませんか・・・。 私の回答も、やってみないと正直わからないので、 他にも様々やってみるとよいかと。 スマホサイトコーディングの登竜門みたいな問題です。 どうか頑張ってほしいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問