feat: Add support for iOS safe area #817
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add support for iOS' safe area environment variables to prevent the navbar from being hidden behind the iPhone's home bar.
It works using the official Webkit guide, which was originally made after the introduction of the iPhone X with iOS 11.
It exposes the
env()
CSS function with 4 variables (safe-area-inset-{top,left,right,bottom}
),requiring(edit: apparently not needed from my testing, removed it - probably only required for the left/right variants?).viewport-fit=cover
in theviewport
meta tag to get rid of natural viewport marginsThese environment variables are smartly populated by the system based on the current Safari layout, giving them a value granularly as needed.
Note
You might note my PR doesn't include the outdated
constant()
function, the previous name ofenv()
between iOS 11.0 and 11.2 beta versions: the already low range of concerned versions combined with the ancient age of this major iOS version isn’t worth the effort, in my opinion.It can, however, be easily added at will with
@supports
queries or CSS rules fallbacks after bypassingcalc()
calls.On desktop, the
env()
function is (supposedly) undefined, invalidating the CSS lines using it, leading to no repercussions on desktop browsers or other mobile browsers. I've tested it on Arc / Chrome desktop in responsive mode and noticed no impact.Demo
A note on documentation PRs
If this is a documentation PR (i.e. changing content within
apps/svelte.dev/content/docs
), then this is the wrong repository to make those changes. The content in this folder is synced from other repositories. Therefore, these changes should be made in their respective repositories (at https://github.com/sveltejs/svelte or https://github.com/sveltejs/kit, or example).Before submitting the PR, please make sure you do the following
feat:
,fix:
,chore:
, ordocs:
.