„The Notch“ und CSS

Avatar of Chris Coyier
Von Chris Coyier am

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

Apples iPhone X hat einen Bildschirm, der die gesamte Vorderseite des Telefons bedeckt, mit Ausnahme einer „Kerbe“, um Platz für eine Kamera und verschiedene andere Komponenten zu schaffen. Dies führt zu einigen ungünstigen Situationen für das Screendesign, wie z. B. die Beschränkung von Websites auf einen „sicheren Bereich“ und weiße Balken an den Rändern. Es ist keine große Kunst, sie zu entfernen, ein background-color für den Body reicht aus. Oder Sie erweitern die Website auf die gesamte Fläche (Kerbe zum Teufel) und fügen viewport-fit=cover zu Ihrem Meta-Viewport-Tag hinzu.

<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> 

Dann liegt es an Ihnen, etwaige Überlappungen zu berücksichtigen, die normalerweise vom sicheren Bereich abgedeckt worden wären. Es gibt neues CSS, das Ihnen dabei hilft. Stephen Radford dokumentiert

Um Anpassungen zu ermöglichen, die erforderlich sein könnten, enthält die iOS 11-Version von Safari einige Konstanten, die verwendet werden können, wenn viewport-fit=cover aktiv ist.

  • safe-area-inset-top
  • safe-area-inset-right
  • safe-area-inset-left
  • safe-area-inset-bottom

Dies kann zu margin, padding oder absoluten Positionierungswerten wie top oder left hinzugefügt werden.

Ich habe Folgendes zum Hauptcontainer auf der Website hinzugefügt.

padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);

(Update: Als das iPhone X auf den Markt kam, wurde constant() anstelle von env() verwendet, aber ab Version 11.2 wurde constant() zugunsten des standardisierten env() entfernt).

Es gibt eine weitere ungünstige Situation mit der Kerbe, dem sicheren Bereich und der festen Positionierung. Darryl Pogue berichtet

Wo sich iOS 11 von früheren Versionen unterscheidet, ist, dass der Webview-Inhalt nun die sicheren Bereiche respektiert. Das bedeutet, dass, wenn Sie eine Header-Leiste haben, die ein Element mit fester Positionierung und top: 0 ist, sie zunächst 20 Pixel unterhalb des oberen Bildschirmrands angezeigt wird: ausgerichtet an der Unterseite der Statusleiste. Wenn Sie nach unten scrollen, bewegt sie sich hinter die Statusleiste. Wenn Sie nach oben scrollen, fällt sie wieder unter die Statusleiste (wodurch eine unschöne Lücke entsteht, durch die der Inhalt in der 20-Pixel-Lücke sichtbar wird).

Wie schlimm es ist, sehen Sie in diesem Videoclip

Glücklicherweise ist dies auch eine einfache Lösung, da die Ergänzung viewport-fit=cover zum Meta-Viewport-Tag dies behebt.

Wenn Sie diesen Viewport abdecken wollen, müssen Sie wahrscheinlich etwas clever sein, um versteckte Inhalte zu vermeiden!