CSS-Fix für 100vh in mobilen WebKit-Browsern

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Eine überraschend häufige Antwort, wenn man Leute fragt, was sie an *irgendetwas* in CSS beheben würden, ist die Verbesserung der Handhabung von Viewport-Einheiten.

Ein Punkt, der oft zur Sprache kommt, ist, wie sie sich zu Scrollbalken verhalten. Wenn ein Element beispielsweise auf 100vw gesetzt und von Rand zu Rand gedehnt wird, ist das in Ordnung, solange die Seite keine vertikale Scrollleiste hat. Wenn sie eine vertikale Scrollleiste hat, dann ist 100vw zu breit, und das Vorhandensein dieser vertikalen Scrollleiste löst eine *horizontale* Scrollleiste aus, da Viewport-Einheiten keine elegante/optionale Möglichkeit haben, damit umzugehen. Man könnte also beispielsweise overflow auf dem body verstecken, obwohl man es sonst nicht müsste. ( Demo )

Ein weiteres Szenario betrifft mobile Browser. Sie könnten Viewport-Einheiten verwenden, um einen festen Footer am unteren Bildschirmrand zu positionieren. Aber dann kann die Browser-Oberfläche erscheinen (z. B. Navigation, Tastatur usw.) und den Footer verdecken, da der mobile Browser nichts über die Änderung der Viewport-Größe berücksichtigt.

Matt Smith dokumentiert dieses Problem

Links verdeckt die Browser-Navigationsleiste (als Browser-Oberfläche betrachtet) den Footer, wodurch es so aussieht, als sei der Footer außerhalb von 100vh, obwohl dies nicht der Fall ist. Rechts wird die Eigenschaft -webkit-fill-available anstelle von Viewport-Einheiten verwendet, um das Problem zu beheben.

Und eine Art Lösung

body {
  min-height: 100vh;
  min-height: -webkit-fill-available;
}
html {
  height: -webkit-fill-available;
}

Das obige wurde aktualisiert, um sicherzustellen, dass das html-Element verwendet wird, da uns mitgeteilt wurde, dass Chrome das Verhalten an die Implementierung von Firefox anpassen wird.

Funktioniert das wirklich? [...] Ich hatte keine Probleme mit den von mir durchgeführten Tests und verwende diese Methode derzeit in der Produktion. Ich habe jedoch eine Reihe von Antworten auf meinen Tweet erhalten, die auf andere mögliche Probleme bei der Verwendung dieser Methode hinweisen (die Auswirkungen von rotierenden Geräten, Chrome ignoriert die Eigenschaft nicht vollständig usw.).

Es wäre besser, eines Tages eine echte Cross-Browser-Lösung dafür zu erhalten, aber ich sehe keine Probleme bei der Verwendung dieser Methode als progressive Verbesserung. Es ist seltsam, eine herstellerspezifische Eigenschaft als progressive Verbesserung zu verwenden, aber hey, die Welt ist seltsam.

Direkter Link →