在iOS 15中,Safari会改变地址栏的行为。它会浮在页面底部附近的某个位置。这会极大地影响页面的设计和用户体验。是否有指示器来检测地址栏,知道它什么时候出现,知道它的位置?
tez616oj1#
使用环境变量safe-area-inset-bottom在底部填充网页,如下所示:
safe-area-inset-bottom
body { padding-bottom: env(safe-area-inset-bottom); }
Jen Simmons的这节课讲述了如何处理Safari的新地址栏:https://developer.apple.com/videos/play/wwdc2021/10029/(从16:44分钟开始观看)
de90aj5v2#
浮动的标签栏被认为是超出了安全区的下边缘。你可以在CSS中使用env(safe-area-inset-bottom)从视口的底部得到安全区的插入。有关支持WebKit中的安全区域的详细信息:https://webkit.org/blog/7929/designing-websites-for-iphone-x
env(safe-area-inset-bottom)
68bkxrlz3#
这种行为正在发生很大的变化。我建议在你的页面上添加一个像这样的DIV:
<div style="background: red; color: white; padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)">Hello!</div>
这会在一个红色的框中给予单词Hello!,并应用了四个安全边距。在页面上的任何地方都可以看到这些边距--你不需要将其作为页脚或页眉。这是一个非常好的帮助,可以可视化正在发生的事情。截至Safari 15当前测试版,有:
Hello!
因此,要使红框实际显示为有填充,您必须:
eulz3vhy4#
你可以使用ObserveResize和Css来解决在屏幕底部附加绝对dom元素的问题。
下面是示例:JavaScript es6 + css solution
wb1gzix05#
这个问题的另一个解决方案(适用于100vh)是:
min-height: 100vh; min-height: -webkit-fill-available;
7ajki6be6#
Webkit(和其他软件)发布了新的单位,以便更好地控制视口高度行为。https://webkit.org/blog/12445/new-webkit-features-in-safari-15-4/新的视口单位就是该解决方案:
100svh
100lvh
100dvh
qacovj5a7#
到目前为止,你还不能真正检测到地址栏的大小,因为env(...) inset变量在最终版本中被删除了。但是!地址栏确实会影响页面上的定位。我不太清楚它是如何决定要移动哪些元素的,但是页面元素可以对它做出React,例如,在移动终端上查看twitter.com时,可以查看Twitter的导航栏。如果你想要类似的行为1.使用fixed定位制作div1.将其从bottom设置为0注意将固定div的高度设置为100vh,因为我认为这会将其挤出地址栏的React区域。请,任何人,张贴评论和更新这个问题,因为它的变化频繁。
env(...)
fixed
div
bottom
0
100vh
7条答案
按热度按时间tez616oj1#
使用环境变量
safe-area-inset-bottom
在底部填充网页,如下所示:Jen Simmons的这节课讲述了如何处理Safari的新地址栏:https://developer.apple.com/videos/play/wwdc2021/10029/(从16:44分钟开始观看)
de90aj5v2#
浮动的标签栏被认为是超出了安全区的下边缘。你可以在CSS中使用
env(safe-area-inset-bottom)
从视口的底部得到安全区的插入。有关支持WebKit中的安全区域的详细信息:https://webkit.org/blog/7929/designing-websites-for-iphone-x
68bkxrlz3#
这种行为正在发生很大的变化。我建议在你的页面上添加一个像这样的DIV:
这会在一个红色的框中给予单词
Hello!
,并应用了四个安全边距。在页面上的任何地方都可以看到这些边距--你不需要将其作为页脚或页眉。这是一个非常好的帮助,可以可视化正在发生的事情。截至Safari 15当前测试版,有:
env(safe-area-inset-bottom)
设置任何值,以避免干扰底部地址栏。env(safe-area-inset-bottom)
***的目的是避免主屏幕指示条。因此,要使红框实际显示为有填充,您必须:
eulz3vhy4#
你可以使用ObserveResize和Css来解决在屏幕底部附加绝对dom元素的问题。
下面是示例:JavaScript es6 + css solution
wb1gzix05#
这个问题的另一个解决方案(适用于100vh)是:
7ajki6be6#
Webkit(和其他软件)发布了新的单位,以便更好地控制视口高度行为。https://webkit.org/blog/12445/new-webkit-features-in-safari-15-4/
新的视口单位就是该解决方案:
100svh
是指最小可能视口高度的100%。100lvh
是指最大可能视口高度的100%。100dvh
指的是动态视口高度的100%-这意味着该值将随着用户滚动而改变。qacovj5a7#
到目前为止,你还不能真正检测到地址栏的大小,因为
env(...)
inset变量在最终版本中被删除了。但是!地址栏确实会影响页面上的定位。我不太清楚它是如何决定要移动哪些元素的,但是页面元素可以对它做出React,例如,在移动终端上查看twitter.com时,可以查看Twitter的导航栏。
如果你想要类似的行为
1.使用
fixed
定位制作div
1.将其从
bottom
设置为0
注意将固定div的高度设置为
100vh
,因为我认为这会将其挤出地址栏的React区域。请,任何人,张贴评论和更新这个问题,因为它的变化频繁。