Windsurf mobile

Fixed Position Elements Broken in iOS Safari on Windsurf App

Fixed-position elements in your Windsurf-generated app — sticky headers, bottom navigation bars, floating action buttons, modals — behave erratically in iOS Safari. They jump when scrolling, disappear behind the keyboard when typing, or drift out of position when the address bar shows or hides.

iOS Safari handles position: fixed differently from desktop browsers and even Android Chrome. The viewport dynamically resizes as the address bar and toolbar show/hide during scrolling, and the virtual keyboard pushes fixed elements around instead of overlaying them. This affects millions of iPhone users.

You might see a bottom navigation bar floating in the middle of the screen, a fixed header that bounces during scroll, a modal that's half-hidden behind the keyboard, or a chat input fixed to the bottom that jumps above the keyboard and back.

Error Messages You Might See

Fixed header jumps on iOS Safari scroll Bottom navigation hidden behind keyboard Modal not visible when keyboard is open Position fixed not working inside transform parent 100vh is taller than visible area on iOS
Fixed header jumps on iOS Safari scrollBottom navigation hidden behind keyboardModal not visible when keyboard is openPosition fixed not working inside transform parent100vh is taller than visible area on iOS

Common Causes

  • Dynamic viewport height changes — iOS Safari's address bar show/hide changes the viewport height, causing fixed elements using vh units to jump
  • Virtual keyboard pushing layout — When the keyboard opens, iOS resizes the visual viewport but doesn't always reposition fixed elements correctly
  • Momentum scrolling conflicts — iOS's elastic bounce scrolling (-webkit-overflow-scrolling: touch) interferes with fixed positioning inside scrollable containers
  • Transform on parent elements — A CSS transform on any ancestor creates a new containing block, making position: fixed behave like position: absolute
  • Safe area not accounted for — Fixed bottom elements are hidden behind the iPhone home indicator bar or notch

How to Fix It

  1. Use dvh instead of vh — Replace 100vh with 100dvh (dynamic viewport height) which accounts for the iOS address bar. Fallback: height: -webkit-fill-available
  2. Handle keyboard with visualViewport API — Listen to window.visualViewport resize events to reposition fixed elements when the keyboard opens
  3. Add safe area insets — Use env(safe-area-inset-bottom) padding on fixed bottom elements to avoid the iPhone home indicator
  4. Avoid transforms on parent elements — If a fixed element's ancestor has transform, will-change, or filter, move the fixed element outside that ancestor in the DOM
  5. Use position: sticky instead — For headers, position: sticky within a scroll container often works more reliably than position: fixed on iOS
  6. Test on a real iPhone — iOS Safari bugs cannot be reproduced in Chrome DevTools mobile simulation. Test on an actual device or BrowserStack

Real developers can help you.

zipking zipking I am a technologist and product builder dedicated to creating high-impact solutions at the intersection of AI and specialized markets. Currently, I am focused on PropScan (EstateGuard), an AI-driven SaaS platform tailored for the Japanese real estate industry, and exploring the potential of Archify. As an INFJ-T, I approach development with a "systems-thinking" mindset—balancing technical precision with a deep understanding of user needs. I particularly enjoy the challenge of architecting Vertical AI SaaS and optimizing Small Language Models (SLMs) to solve specific, real-world business problems. Whether I'm in a CTO-level leadership role or hands-on with the code, I thrive on building tools that turn complex data into actionable value. Anthony Akpan Anthony Akpan Developer with 8 years of experience building softwares fro startups Costea Adrian Costea Adrian Embedded Engineer specilizing in perception systems. Latest project was a adas camera calibration system. Alvin Voo Alvin Voo I’ve watched the tech landscape evolve over the last decade—from the structured days of Java Server Pages to the current "wild west" of Agentic-driven development. While AI can "vibe" a frontend into existence, I specialize in the architecture that keeps it from collapsing. My expertise lies in the critical backend infrastructure: the parts that must be fast, secure, and scalable. I thrive on high-pressure environments, such as when I had only three weeks to architect and launch an Ethereum redemption system with minimal prior crypto knowledge, turning it into a major revenue stream. What I bring to your project: Forensic Debugging: I don't just "patch" bugs; I use tools like Datadog and Explain Analyzers to map out bottlenecks and resolve root causes—like significantly reducing memory usage by optimizing complex DB joins. Full-Stack Context: Deep experience in Node.js and React, ensuring backends play perfectly with mobile and web teams. Sanity in the Age of AI: I bridge the gap between "best practices" and modern speed, ensuring your project isn't just built fast, but built to last. Dor Yaloz Dor Yaloz SW engineer with 6+ years of experience, I worked with React/Node/Python did projects with React+Capacitor.js for ios Supabase expert Matthew Jordan Matthew Jordan I've been working at a large software company named Kainos for 2 years, and mainly specialise in Platform Engineering. I regularly enjoy working on software products outside of work, and I'm a huge fan of game development using Unity. I personally enjoy Python & C# in my spare time, but I also specialise in multiple different platform-related technologies from my day job. AUXLE AUXLE I am a Full Stack Developer experienced in building Websites, Web apps and Cross Platform Mobile Apps for Startups and Companies. Luca Liberati Luca Liberati I work on monoliths and microservices, backends and frontends, manage K8s clusters and love to design apps architecture Antriksh Narang Antriksh Narang 5 years+ Experienced Dev (Specially in Web Development), can help in python, javascript, react, next.js and full stack web dev technologies. Yovel Cohen Yovel Cohen I got a lot of experience in building Long-horizon AI Agents in production, Backend apps that scale to millions of users and frontend knowledge as well.

You don't need to be technical. Just describe what's wrong and a verified developer will handle the rest.

Get Help

Frequently Asked Questions

Why does 100vh not work on iOS Safari?

iOS Safari defines 100vh as the height of the viewport with the address bar hidden (the tallest possible height). When the address bar is visible, the actual visible area is smaller than 100vh, causing overflow. Use 100dvh or -webkit-fill-available instead.

Can I detect when the iOS keyboard is open?

Use the Visual Viewport API: window.visualViewport.height will be smaller than window.innerHeight when the keyboard is open. Listen to the resize event on window.visualViewport to react to keyboard show/hide.

Related Windsurf Issues

Can't fix it yourself?
Real developers can help.

You don't need to be technical. Just describe what's wrong and a verified developer will handle the rest.

Get Help