1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ページの可視領域を算出する方法について整理する 📝

Last updated at Posted at 2025-11-01

背景 🏃‍♂️

業務で“実際に見えている”ページ領域(今回は高さ)を算出する必要があり、調査すると以下の選択肢があったのでここに整理します!

モバイルでも使用する想定です。

  • window.innerHeight
  • window.outerHeight
  • window.visualViewport.height
  • document.documentElement.clientHeight

結論 💡

今回の用途としてはwindow.visualViewport.heightが最適だなと判断しました。

理由

  • 画面を拡大縮小(macで言うcommand + )すると値も連動する
  • 画面をズームイン、ズームアウトすると値も連動する
  • 仮想(画面)キーボードが表示されると値も連動する(モバイル)
  • 動的ツールバーの高さは含まない

最終的な比較表は以下です

image.png

用語説明

ビューポートとは

ウィンドウ (または、文書が全画面モードで表示されている場合は画面) の中で現在見えている部分のこと

視覚的ビューポートとは

ビューポートの中で現在表示されている部分

動的ツールバーとは
モバイルでページ初期表示時に表示される画面下部のバー

image.png
https://web.dev/blog/viewport-units?hl=ja

仮想(画面)キーボードとは

モバイルで入力中に表示されるキーボードのこと

image.png

次にそれぞれの算出方法の説明や特徴について解説します

window.innerHeight

  • 今表示されている視覚的ビューポートの高さ(px)
  • 水平スクロールバーがあればその高さを含む
  • 画面を拡大縮小(macで言うcommand + )すると値も連動する
  • 画面をズームイン、ズームアウトすると値は連動しない
  • 仮想キーボードが表示されると、innerHeightは連動しない(モバイル)
  • 動的ツールバーの高さは含まない

image.png

「仮想キーボードが表示されると、innerHeightは連動しない」ことについてつぶやかれていたツイートが以下です。

window.outerHeight

  • ブラウザーウィンドウ全体の高さ(px)
  • 以下を含む
    • サイドバー
    • ウィンドウの操作部分
    • ウィンドウをリサイズする境界やハンドル

image.png

window.visualViewport.height

  • 今表示されている視覚的ビューポートの高さ
  • 画面を拡大縮小(macで言うcommand + )すると値も連動する
  • 画面をズームイン、ズームアウトすると値も連動する
  • 仮想(画面)キーボードが表示されると値も連動する(モバイル)
  • 動的ツールバーの高さは含まない

image.png

document.documentElement.clientHeight

  • 今表示されている視覚的ビューポートの高さ
  • 画面を拡大縮小(macで言うcommand + )すると値も連動する
  • 画面をズームイン、ズームアウトすると値は連動しない
  • 仮想キーボードが表示されると、値は連動しない(モバイル)
  • スクロールバーを除く
  • 動的ツールバーの高さを含む

image.png

仮想キーボード表示によって値に違いが出るか検証

Webインスペクタを使って検証しました。(iPhoneのSafari,Chrome)

以下をスマホで表示している状態でWebインスペクタを使ってjsを実行します。
これにより、キーボードを除いた見えているページ部分の高さのみが算出されるかを見ます。
image.png

image.png

以下のように、window.visualViewport.heightを使うと確かに今見えている部分を正確に算出できていることが分かりました。(document.documentElement.clientHeightだとwindow.innerWidthと同様の結果になりました)

キーボード表示;547px
キーボード非表示;320.5px

Chromeでも同様の結果になりました。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?