ビューポートの大きなユニット、小さなユニット、動的なビューポートのユニット

動的ツールバーを備えたモバイル ビューポート用の新しい CSS ユニット。

ビューポートとその単位

ビューポートと同じ高さにサイズを設定するには、vw 単位と vh 単位を使用できます。

  • vw = ビューポート サイズの幅の 1%。
  • vh = ビューポート サイズの高さの 1%。

要素の幅を 100vw、高さを 100vh に設定すると、ビューポート全体に表示されます。

100 vw x 100 vh に設定された薄い青色の要素。ビューポート全体を覆います。ビューポートそのものは青い破線で示されます。
100vw x 100vh に設定された水色の要素で、ビューポート全体を覆っています。
ビューポート自体は、青い破線で示されています。

vw と vh のユニットは、これらの追加ユニットとともにブラウザで表示されました

  • vi = ビューポートのインライン軸のサイズの 1%。
  • vb = ビューポートのブロック軸のサイズの 1%
  • vmin = vw と vh のどちらか小さい方。
  • vmax = vw と vh のどちらか大きい方。

これらのユニットは、ブラウザ サポートが良好です。

対応ブラウザ

  • 20
  • 12
  • 19
  • 6

新しいビューポート ユニットの必要性

既存の広告ユニットはパソコンでは問題なく機能しますが、モバイル デバイスでは動作が異なります。この場合、ビューポートのサイズは、動的ツールバーの有無によって決まります。アドレスバーやタブバーなどのユーザー インターフェースです。

ビューポートのサイズは変更できますが、vw と vh のサイズは変わりません。そのため、高さが 100vh のサイズの要素はビューポートの外に出ます。

モバイルの 100 vh は負荷時に高すぎます。
モバイルでの 100 vh は負荷時に高すぎます。

下にスクロールすると、動的なツールバーは後退します。この状態では、高さが 100vh の要素がビューポート全体を覆います。

ユーザー エージェントのユーザー インターフェースが閉じられた場合は、モバイルでの 100 vh が「適切」です。
ユーザー エージェントのユーザー インターフェースが閉じられた場合は、モバイルでの 100vh が「適切」です。

この問題を解決するために、ビューポートのさまざまな状態が CSS ワーキング グループで規定されています。

  • 大きなビューポート: 動的に展開および撤回される UA インターフェースを想定したビューポートのサイズです。
  • 小さいビューポート: 拡張するために動的に拡張 / 後退する UA インターフェースを想定したビューポートのサイズです。
大きいビューポートと小さいビューポートの可視化。
大きいビューポートと小さいビューポートの可視化

新しいビューポートにも単位が割り当てられています。

  • 大きなビューポートを表す単位には、lv という接頭辞が付いています。単位は lvw、lvh、lvi、lvb、lvmin、lvmax です。
  • 小さいビューポートを表す単位には、sv という接頭辞が付いています。単位は svw、svh、svi、svb、svmin、svmax です。

これらのビューポートの割合のユニットのサイズは、ビューポート自体のサイズを変更しない限り固定されます(したがって安定しています)。

隣り合わせに配置された 2 つのモバイル ブラウザのビジュアリゼーション。1 つは 100svh のサイズの要素、もう 1 つは 100lvh のサイズの要素を持ちます。
隣り合わせに配置された 2 つのモバイル ブラウザのビジュアリゼーション。
1 つは 100svh のサイズの要素、もう 1 つは 100lvh のサイズの要素。

大小のビューポートに加えて、UA の UI を動的に考慮する動的なビューポートもあります。

  • 動的ツールバーが開かれると、動的ビューポートは小さいビューポートのサイズと等しくなります。
  • 動的ツールバーを閉じた場合、その動的ビューポートは大きいビューポートのサイズと同じになります。

付属のユニットには dv の接頭辞(dvw、dvh、dvi、dvb、dvmin、dvmax)が付いています。それらのサイズは、対応する lv* と sv* の間で固定されます。

100dvh は、大きいまたは小さいビューポート サイズに適応します。
100dvh は、大きいビューポートまたは小さいビューポートのサイズに合わせて調整されます。

これらのユニットは Chrome 108 で出荷され、Safari と Firefox に加えてすでにサポートされています。

対応ブラウザ

  • 108
  • 108
  • 101
  • 15.4

注意点

ビューポート単位については、次の点に注意してください。

  • いずれのビューポート ユニットも、スクロールバーのサイズは考慮されません。そのため、クラシック スクロールバーが有効になっているシステムでは、100vw のサイズに設定された要素の幅がやや広すぎます。これは仕様に即したものです。

  • 動的ビューポートの値は 60 fps では更新されません。すべてのブラウザで、UA UI の展開や格納に伴って更新が抑制されます。一部のブラウザでは、使用する操作(ゆっくりとしたスクロールとスワイプ)によって更新が完全に遅れることもあります。

  • 画面キーボード(仮想キーボード)は UA UI の一部とは見なされません。そのため、ビューポート ユニットのサイズには影響しません。Chrome では、仮想キーボードの有無がビューポートの単位に影響する動作にオプトインできます。

参考情報

ビューポートとこれらのユニットについて詳しくは、HTTP 203 のこちらのエピソードをご覧ください。その中で、Bramus は Jake にさまざまなビューポートと、これらのユニットのサイズが正確に決まる仕組みを説明しています。

その他の参考資料: