URL バーのサイズ変更

David Bokan

Android 版 Chrome のバージョン 56 以降、URL バーのサイズ変更動作が変更されます。Super Stickers の概要:

ビューポートの単位(vh)で定義された長さは、URL バーの表示 / 非表示に応じてサイズ変更されません。代わりに、vh ユニットは、URL バーが常に非表示であるかのように、ビューポートの高さに合わせてサイズ調整されます。つまり、vh ユニットは「表示可能な最大のビューポート」にサイズ調整されます。つまり、URL バーが表示されたときの 100vh は、表示の高さよりも大きくなります。

Initial Containing Block(ICB)は、親を基準として要素のサイズを設定する際に使用される、ルートを含むブロックです。たとえば、<html> 要素のスタイルを width: 100%; height: 100% に設定すると、ICB と同じサイズになります。この変更により、URL バーが非表示になっていても ICB のサイズは変わりません。 高さは URL バーが常に表示されていたときと同じになります(「表示可能な最小のビューポート」)。つまり、ICB の高さにサイズ変更された要素は、URL バーが非表示の間、表示される高さに完全には収まらないということです。

上記の変更には例外が 1 つあります。それは、要素が position: fixed の場合です。動作に変更はありません。つまり、ICB を含むブロックを含む position: fixed 要素は、URL バーの表示または非表示に応じてサイズ変更されます。たとえば、高さが 100% の場合は、URL バーが表示されるかどうかにかかわらず、常に視認可能な高さに完全に合わせられます。vh の長さについても同様に、URL バーの位置を考慮して、表示の高さに合わせてサイズが変更されます。

この変更には次のような理由があります。

  • モバイルで使用可能な vh ユニットです。以前は、vh 単位を使用すると、ユーザーがスクロール方向を変更するたびにページが不自然なリフローでリフローされていました。

  • ユーザー エクスペリエンスの向上。ユーザーが閲覧中にページがリフローすると、ドキュメント内の相対的な位置が失われる可能性があります。これは不便ですが、ページの再レイアウトと再描画のためにプロセッサの使用量が増加し、バッテリーの消耗も生じます。

  • iOS での Safari との相互運用性を改善しました。新しいモデルは Safari の動作と適合し、ウェブ デベロッパーの作業負担が軽減されます。vh ユニットを可能な限り最大のビューポートにするという直感的な選択はありませんが、ICB を可能な限り最小にするのは、Safari の動作に合わせるためです。

URL バーが非表示状態にロックされている全画面表示のシナリオでは、ICB は全画面の高さを使用します。これは上記の定義と同じです。スクロール時に URL バーが表示されないため、「表示可能な最小のビューポート」とはビューポート全体のことです。

デモ

  • デモをご覧ください。 ページの右側にある 4 本のバーは、スクロール可能なページで提供される 99%99vhposition:fixedposition:absolute のすべての組み合わせです。URL バーを非表示にすると、それぞれの影響が表示されます。サイズ変更イベントがページ下部に出力されます。

サポート

  • Android 版 Chrome 56