CSS env() – Websites für nicht rechteckige Displays optimieren (z.B für das iPhone X)

Das iPhone ab Version X verwendet ein nahezu randloses Display, dass sich über die gesamte Vorderfläche des Geräts erstreckt. Da das iPhone insgesamt abgerundet ist, sind auch die Ecken des Displays abgerundet. Daher müssen Designer für das iPhone X einige Besonderheiten berücksichtigen um im Safari für iOS auch wirklich das gesamte Display für die Website zu verwenden. In diesem Beitrag beschreiben wir, wie ihr mit geringem Aufwand Websites für das iPhone X optimieren könnt.

Weiße Balken im Safari auf dem iPhone X

Zunächst eine beruhigende Information: Eure Website erzeugt keine schlimme Fehldarstellung auf dem iPhone X, solltet ihr keine Optimierung vorgenommen haben. Allerdings zeigt Safari je nach Ausrichtung des Geräts oben und unten bzw. rechts und links einen weißen Balken an. Das hängt damit zusammen, dass der Browser nicht automatisch entscheidet wie sich eurer Web-Layout im Bereich der abgerundeten Displayecken verhalten soll. Daher geht Safari auf Nummer sicher und zeigt lieber einen weißen Balken an um den notwendigen Sicherheitsabstand zum Rand des Displays einzuhalten.

Ohne jegliche Anpassung wird die für diesen Beitrag erstellte Beispiel-Website wie folgt dargestellt:

Optimierung mittels background-color

Um die weißen Balken optisch zu entfernen, kann die background-color des <body> verwendet werden. Diese Lösung funktioniert gut bei schlichten Websites mit durchgängig einfarbigem Hintergrund.

Wenn allerdings die Hintergrundgestaltung unterschiedlich farbiger Bereiche jeweils horizontal bis zum Ende des Viewports ausgedehnt werden soll, funktioniert diese Lösung nicht gut. Für unser Beispiel wäre es wünschenswert, dass der hellgraue Inhaltsbereich und die dunkelgraue Navigationsleiste ebenfalls rechts und links weiterlaufen.

Die weißen Balken auf dem iPhone X wurden mittels background-color blau eingefärbt. Besser, aber in diesem Fall noch nicht ausreichend

Optimierung mit viewport-fit:cover

Um die Gestaltung nahlos bis an die Kante des Displays weiterlaufen zu lassen, hat Apple dem bereits bekannten <meta name="viewport"> den neuen Befehl viewport-fit=cover spendiert, der runde Displays berücksichtigt und auch in der CSS Round Display Specification beschrieben wird.

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

Nachteilig an dieser Lösung ist, dass – je nach Gestaltung der Website – Inhalte verdeckt bzw. angeschnitten werden können.

Mit viewport-fit=cover skaliert die Website nahlos bis an die Displaykante heran

Definition von »Safe Areas« mittels env(safe-area-inset-*)

Um den unerwünschten Anschnitt von Inhalten zu vermeiden, kann ab iOS 11 zusätzlich zur o.g. Viewport-Eigenschaft die sog. »Safe Area« definiert werden – also ein sicherer Bereich, in den keine Inhalte hineinlaufen können. Details dazu findet ihr in den Human Interface Guidelines von Apple.

iPhone X Safe Areas
Orange eingezeichnet: safe-area-inset-left, und safe-area-inset-right

Um die Safe Area festzulegen existieren die folgenden Eigenschaften, die wiederum auf margin, padding und absolute Positionsangaben (position: absolute) angewandt werden können:

Im Code unseres Beispiels sieht es dann z. B. so aus. Die Safe-Areas werden in der CSS-Funktion env() notiert. env() steht übrigens für Environment Variables.

nav { 
  background: #0f1214; 
  padding:  
    env(safe-area-inset-top)  
    env(safe-area-inset-right)  
    0  
    env(safe-area-inset-left);
}
Für das iPhone X optimierte Website mittels viewport-fit und env()

Demos

Wie eingangs erwähnt haben wir eine Beispiel-Seite gebaut um das Verhalten nachvollziehen und optimieren zu können. Zur Simulation haben wir den iPhone X-Simulator von Apple Xcode verwendet.

Demo: Website ohne Optimierung

Demo: Website mit Optimierung

Browser Support

Den detaillierten Browser-Support für dieses Feature könnt ihr auf caniuse.com einsehen.

Data on support for the css-env-function feature across the major browsers from caniuse.com

Hinweis zur constant()-Funktion in iOS 11

Die Funktion env() hieß in iOS 11 noch constant(). constant() wurde entfernt und durch env() ersetzt. env() steht für Environment Variables und ist hier spezifiziert.

Geschrieben von Jonas

Benutzerbild

Jonas ist Gründer der Agentur kulturbanause und des kulturbanause Blogs. Er arbeitet an der Schnittstelle zwischen UX/UI Design, Frontend und Redaktion und hat zahlreiche Fachbücher und Video-Trainings veröffentlicht. Jonas Hellwig ist regelmäßig als Sprecher auf Fachveranstaltungen anzutreffen und unterstützt mit Seminaren und Workshops Agenturen und Unternehmen bei der Planung, der Gestaltung und der technischen Umsetzung von Web-Projekten.

Jonas Hellwig bei Xing

Feedback & Ergänzungen – 8 Kommentare

  1. Moritz Mössinger
    schrieb am 06.04.2020 um 12:40 Uhr:

    Für einen WordPress Neuling wie mich stellt sich die Frage wo ich den Code idealer Weise in den Custom CSS Settings einfüge?

    Antworten
    • Jonas Hellwig
      schrieb am 07.04.2020 um 20:02 Uhr:

      Hallo Moritz, du musst mit den Entwickler-Tools zunächst herausfinden, welcher CSS-Selektor der richtige ist. Anschließend könnte man diesen Selektor und den hier gezeigten Code in WordPress über »Custom CSS« ergänzen. Aber eigtl. ist diese Stelle in WordPress dafür nicht gut geeignet. Die Befehle sollte besser fest im Stylesheet des Themes verankert sein.

      Antworten
  2. René
    schrieb am 02.03.2018 um 08:40 Uhr:

    Ich habe jetzt eine Zeit lang versucht, diese Tipps umzusetzen. Bin fast verzweifelt, weil es nicht funktioniert hat.

    Folgendes hat mir geholfen:
    https://webkit.org/blog/7929/designing-websites-for-iphone-x/

    Hier wird anstatt constant() die CSS-Funktion env() verwendet. Ausprobiert und schon hat es geklappt.

    Antworten
    • Jonas Hellwig
      schrieb am 04.03.2018 um 19:53 Uhr:

      Hallo René, vielen Dank für deinen Hinweis. Ich hatte gar nicht mitbekommen, dass sich die Funktion geändert hat. Ich habe den Beitrag und die Demo aktualisiert.

      Antworten
  3. Christoph
    schrieb am 19.01.2018 um 14:25 Uhr:

    Schon komisch, auf was man alles achten muss mittlerweile. Damals war es der IE6, der nur transparente GIFs und keine transparenten PNGs darstellen konnte und nun die Eigenheiten der Smartphones … :)

    Antworten
    • Jonas Hellwig
      schrieb am 19.01.2018 um 16:45 Uhr:

      Der Unterschied besteht aber darin, dass heute dank Progressive Enhancement weniger sichtbare Fehler entstehen als früher.

      Antworten
  4. Tom
    schrieb am 16.11.2017 um 11:47 Uhr:

    Wie verhält es sich denn mit der Darstellung im Portrait-Modus? Entstehen da dann auch oben und unten schwarzen Balken, oder rechnet safari dann einfach die Balken raus,a ls eine Art Standard Setting. Habe leider kein iPhone X zum testen.

    Danke für einen Tipp und VG

    Tom

    Antworten
    • Jonas Hellwig
      schrieb am 16.11.2017 um 16:27 Uhr:

      Im Portrait-Mode tritt grundsätzlich das gleiche Problem auf – allerdings ist es bei Weitem nicht so tragisch, da der Browser seine UI-Elemente oben und unten über der Website platziert.

      Antworten

Kommentar zu dieser Seite

Wir freuen uns über Anregungen, Ergänzungen oder Hinweise zu Fehlern. Wir lesen jeden Eintrag, veröffentlichen aber nur, was den Inhalt sinnvoll ergänzt.

Design-Projekte mit kulturbanause

Unsere Leinwand ist der Browser und wir beschäftigen uns seit 2010 intensiv mit dem Thema Responsive Design. Wir realisieren flexible Web-Layouts und modulare Design Systeme.

Responsive Webdesign-Leistungsangebot →

Schulungen von kulturbanause

Wir bieten Seminare und Workshops zu den Themen Konzept, Design und Development. Immer up-to-date, praxisnah, kurzweilig und mit dem notwendigen Blick über den Tellerrand.

Übersicht Schulungsthemen →