Back

5 Mobile-Web-Stolpersteine (und wie man sie behebt)

5 Mobile-Web-Stolpersteine (und wie man sie behebt)

Sie haben Ihr Layout an jedem Breakpoint getestet, Ihr responsives Grid sieht sauber aus und alles funktioniert einwandfrei in den Chrome DevTools. Dann öffnen Sie die Website auf einem echten Smartphone und irgendetwas ist leicht, aber hartnäckig falsch. Das sind Mobile-Web-Stolpersteine – kleine Bugs, die die Seite nicht kaputtmachen, aber die User Experience unmerklich verschlechtern.

Hier sind fünf Probleme, die in realen Projekten immer wieder auftauchen, und die modernen Lösungen dafür.

Wichtigste Erkenntnisse

  • 100vh läuft auf mobilen Browsern mit dynamischer UI-Chrome über. Verwenden Sie 100svh als stabilen Standard oder 100dvh für Layouts, die sich anpassen sollen, wenn die Browser-Chrome ein- und ausgeblendet wird.
  • Bottom-fixed-Elemente können durch Device Safe Areas verdeckt werden. Fügen Sie viewport-fit=cover hinzu und verwenden Sie env(safe-area-inset-bottom), um sie sichtbar zu halten.
  • iOS Safari zoomt automatisch bei Inputs mit einer Schriftgröße unter 16px. Setzen Sie font-size: 16px oder größer für alle Formularfelder, anstatt den User-Zoom zu deaktivieren.
  • Scroll Chaining leitet Scroll-Events aus Modals heraus. Wenden Sie overscroll-behavior: contain auf den scrollbaren Container an – kein JavaScript erforderlich.
  • Zu kleine Tap-Targets führen zu verfehlten oder falsch geleiteten Taps. Streben Sie Touch-Targets von etwa 44×44px an, indem Sie Padding verwenden, um die Hit-Area zu vergrößern.

1. Full-Height-Layouts brechen wegen 100vh

Symptom: Ein Fullscreen-Hero oder Modal ist auf iOS Safari etwas zu hoch, wodurch Inhalte abgeschnitten werden oder eine Scrollbar erscheint.

Warum es passiert: 100vh wird gegen die volle Viewport-Höhe berechnet und ignoriert die dynamische UI-Chrome des Browsers (Adressleiste und Navigationssteuerelemente). Wenn diese Elemente sichtbar sind, läuft 100vh über.

Die Lösung: Verwenden Sie die neueren CSS-Viewport-Einheiten. Für die meisten Full-Height-Layouts ist 100svh (Small Viewport Height) eine stabile Wahl, da es den sichtbaren Bereich mit vorhandener Browser-UI darstellt. Verwenden Sie 100dvh, wenn sich das Layout dynamisch anpassen soll, während die Browser-Chrome ein- und ausgeblendet wird. Die moderne Browser-Unterstützung für diese Einheiten ist weitreichend verfügbar, wie auf https://webstatus.dev/features/viewport-unit-variants zu sehen ist.

.hero {
  height: 100svh; /* stable default */
}

2. Bottom-Fixed-UI wird hinter Device Safe Areas versteckt

Symptom: Ein Sticky-Footer, eine untere Navigationsleiste oder ein Action-Button wird teilweise vom Home-Indikator auf dem iPhone oder durch andere Device Safe Areas verdeckt.

Warum es passiert: Fixed-Elemente, die bei bottom: 0 positioniert sind, sitzen bündig am Rand des Viewports, nicht am Safe Area des Geräts. Auf Geräten mit Home-Indikatoren oder abgerundeten Ecken kann die System-UI das Element überlagern.

Die Lösung: Fügen Sie viewport-fit=cover zu Ihrem Meta-Viewport-Tag hinzu und verwenden Sie dann CSS-Safe-Area-Umgebungsvariablen wie env(safe-area-inset-bottom), um das Element nach oben zu verschieben.

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
.bottom-nav {
  padding-bottom: env(safe-area-inset-bottom);
}

3. iOS zoomt in Formular-Inputs hinein

Symptom: Das Antippen eines <input> auf iOS Safari führt dazu, dass die Seite unerwartet hineinzoomt und das Layout stört.

Warum es passiert: iOS Safari zoomt automatisch, wenn die Schriftgröße eines Inputs kleiner als 16px ist, und behandelt dies als Lesbarkeits-Hilfe.

Die Lösung: Setzen Sie font-size: 16px (oder größer) für alle Inputs. Deaktivieren Sie den Zoom nicht über user-scalable=no – das schadet der Barrierefreiheit. Verwenden Sie dabei auch inputmode, um die richtige Tastatur anzufordern, autocomplete, um Reibung zu reduzieren, und enterkeyhint, um die Return-Taste zu beschriften.

<input
  type="email"
  inputmode="email"
  autocomplete="email"
  enterkeyhint="done"
  style="font-size: 16px;"
/>

4. Scroll läuft aus Modals und Drawers heraus

Symptom: Wenn ein Benutzer innerhalb eines Modals oder Bottom Sheets scrollt und das Ende erreicht, beginnt die Seite dahinter ebenfalls zu scrollen.

Warum es passiert: Das ist Scroll Chaining – der Browser propagiert Scroll-Events zum Parent, wenn der Child-Scroll-Container seine Grenze erreicht.

Die Lösung: Wenden Sie overscroll-behavior: contain auf den scrollbaren Container an. Die moderne Browser-Unterstützung ist breit gefächert, einschließlich Safari 16 und später, wie auf https://webstatus.dev/features/overscroll-behavior zu sehen ist.

.modal-body {
  overflow-y: auto;
  overscroll-behavior: contain;
}

5. Tap-Targets fühlen sich träge an oder triggern das falsche Element

Symptom: Buttons fühlen sich träge an oder Taps werden auf dem falschen Element registriert – besonders in dichter UI wie Navigationsmenüs oder Listen.

Warum es passiert: Touch-Targets, die zu klein sind, erzeugen Hit-Testing-Mehrdeutigkeit. Moderne Browser handhaben Tap-Events ohne die historische 300ms-Verzögerung (solange Ihr Viewport-Meta-Tag korrekt ist), aber zu kleine Targets führen dennoch zu verfehlten oder falsch geleiteten Taps.

Die Lösung: Streben Sie Touch-Targets gemäß der WCAG-Target-Size-Empfehlung von etwa 44×44 CSS-Pixeln an. Verwenden Sie Padding statt Margin, um die Hit-Area zu vergrößern, ohne das Layout zu beeinflussen.

.nav-link {
  min-height: 44px;
  min-width: 44px;
  display: flex;
  align-items: center;
  padding: 0 12px;
}

Fazit

Diese Mobile-Web-Stolpersteine treten selten isoliert auf – ein Layout, das abgeschnitten wird, ein Button, der sich versteckt, ein Formular, das zoomt. Jeder einzelne ist für sich genommen geringfügig, aber zusammen signalisieren sie eine Website, die nicht wirklich auf einem Gerät getestet wurde. Modernes CSS gibt Ihnen saubere, standardbasierte Werkzeuge, um all diese Probleme zu beheben. Wenden Sie diese Fixes einmal an und sie werden Bestand haben, während sich Browser weiterentwickeln.

FAQs

Ja. Die Small-, Large- und Dynamic-Viewport-Einheiten (svh, lvh, dvh) werden in allen modernen Browsern unterstützt, einschließlich Safari auf iOS 15.4 und später, Chrome, Edge und Firefox. Für ältere Browser können Sie einen Fallback bereitstellen, indem Sie height: 100vh vor der svh- oder dvh-Regel deklarieren. Der Browser ignoriert die Einheit, die er nicht erkennt, und verwendet den Fallback.

Ja, ab Safari 16. In älteren Versionen von iOS Safari hat overscroll-behavior keine Wirkung und Scroll Chaining tritt weiterhin auf. Wenn Sie diese älteren Versionen unterstützen müssen, ist ein JavaScript-basierter Ansatz, der touchmove auf dem Body verhindert, während das Modal geöffnet ist, der zuverlässigste Fallback.

Das Deaktivieren der Benutzerskalierung entfernt die Möglichkeit zum Pinch-to-Zoom, was eine wichtige Barrierefreiheitsfunktion für Benutzer mit Sehschwäche ist. Es verstößt auch gegen das WCAG-Erfolgskriterium 1.4.4. Die korrekte Lösung besteht darin, die Schriftgröße bei Inputs auf 16px oder größer zu setzen, was den Auto-Zoom verhindert, ohne den Zoom für Benutzer einzuschränken, die ihn benötigen.

Nur Elemente, die nahe an den Bildschirmrändern sitzen, benötigen Safe-Area-Insets. Eine Bottom-Fixed-Navigationsleiste oder ein Floating-Action-Button nahe am unteren Rand profitieren von env(safe-area-inset-bottom). Elemente, die von den Bildschirmrändern entfernt positioniert oder im Viewport zentriert sind, benötigen dies in der Regel nicht. Testen Sie immer auf einem Gerät mit Home-Indikator oder Notch, um dies zu bestätigen.

Truly understand users experience

See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data. . Check our GitHub repo and join the thousands of developers in our community..

OpenReplay