iOS Chromeがドキュメントの誤った高さを計算する


10

ページの高さ全体を埋めるために、私height: 100%;はhtmlタグとbodyタグに使用し、ブラウザーを閉じて再度開くまで正常に機能します。(モバイルデバイスの問題のため、100vhは使用しませんhttps://nicolas-hoizey.com/2015/02/viewport-height-is-taller-than-the-visible-part-of-the-document-in -some-mobile-browsers.html

再現する手順:

これらの場合、ページは自動的に修正されます。

  • 更新ページ
  • デバイスを横向きに回転させます
  • タブによるブラウザのナビゲーションの開閉
  • マルチタスクナビゲーションでブラウザを閉じずに閉じて再度開く

なぜそれが起こるのですか?この動作を修正するにはどうすればよいですか?

前もって感謝します!


詳細については、こちらをご覧ください。コードサンプルを投稿できますか?残りのcss / htmlマークアップは、高さとプラットフォームだけでなく、問題の原因である可能性があります
レイチェルガレン

好奇心が強い-この例では、.linksdivをに変更できますposition: absolute。これにより、表示される動作が変わりますか?(テストするiphoneはありません)
slynagh

これがあなたのコード例@Rachel Gallenです。
Aaron3219

また、お使いの携帯電話を横向きにして、もう一度元に戻してみてください。修正されます。これは、HTML / CSSではなくChromeの問題だと思います。これはChromeでのみ表示され、下にスクロールする必要がある量は、Chromeブラウザーの下部バーと上部バーを組み合わせた場合のピクセルの正確な量です。
Aaron3219

@slynaghいいえ、それはしません。
Aaron3219

回答:


3

私はまったく別の問題を抱えていましたが、私が解決した解決策は、ページを更新すると修正されると述べたので、あなたの状況でもうまくいくと思います。

だから私はアンドロイドのクロムに問題があり、非常に速くスクロールすると(モバイルでは珍しくありません)、いくつかの要素が再/ペイントされないことがあります。どこでも解決策を探しましたが、うまくいくものを見つけることができませんでした。

最後に、私は実用的な修正を見つけました:

.pagewrap {
  transform: translateZ(0);
  animation-name: 'repaint';
  animation-duration: 3s;
  animation-iteration-count: infinite;
  animation-play-state: running;
  animation-timing-function: linear;
}

@keyframes repaint {from { zoom: 99.99999%; } to { zoom: 99.99998%; }}

つまり、これにより、ページは3秒サイクルで継続的に再描画されます。

多分私はそれを微調整して、継続的にではなく、2秒ごとに1秒のほんの少しだけシフトする必要があります:

.pagewrap {
  transform: translateZ(0);
  animation-name: 'repaint';
  animation-duration: 2s;
  animation-iteration-count: infinite;
  animation-play-state: running;
  animation-timing-function: linear;
}

@keyframes repaint {
  0% {
    zoom: 99.99999%;
  }
  99% {
    zoom: 99.99999%;
  }
  100% {
    zoom: 99.99998%;
  }
}

私が試みzoom: 99.99999;ました1が、いくつかのホバー効果でスケールが1を超えて遷移した特定の要素は、ズーム呼吸を示します。したがって、99.99999〜99.99998は、効果を目に見えなくするために私が働いたものです。

非常に長いページのパフォーマンスの問題を引き起こす可能性のある少しハックなソリューションですが、ブラウザは画面上のものだけをレンダリングする必要があるため、そうではない可能性があります。私がこれを使用したページは、グラフィックが重く、複雑なマルチレイヤー効果がたくさんあり、これはパフォーマンスに大きな影響を与えていないようです。

多くのモバイルブラウザーはレンダリングが過度に最適化されているようです。そのため、十分に文書化された修正がほとんどなく、風変わりなエラーが発生します。再ペイントを強制することが私が見つけた唯一の実用的な修正でした。

私は、再描画を強制するために、あまり積極的ではない、文書化された他の方法を試しました。スクロールが200ミリ秒停止した後、(目に見えないように)ページにテキストを追加するようなものです。何もうまくいかなかったので、私のアニメーションのページ全体を永久にハックしました。

あなたの場合、それらの他のハックのいくつかはよりうまく機能するかもしれません。この記事では、再描画/リフローの原因となるさまざまなことをすべて概説しているので、スクリプトを使用してこれらのことのいくつかを試すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.