使用 JS 或 CSS 检测 iOS 设备是不是有 home bar

Posted

技术标签:

【中文标题】使用 JS 或 CSS 检测 iOS 设备是不是有 home bar【英文标题】:Detect whether an iOS device has a home bar using JS or CSS使用 JS 或 CSS 检测 iOS 设备是否有 home bar 【发布时间】:2020-08-21 23:44:36 【问题描述】:

我正在为 ios 构建一个网络应用程序,并且想知道是否可以使用 JS 或 CSS 来检测设备底部是否有屏幕 Home Bar(即 iPhone X、11 或 iPad Pro -圆角,没有主页按钮)。

因为如果创建标签栏,我需要知道是否在底部添加额外的填充以适应这一点,如下图所示。

没有使用媒体查询从这些设备的确切屏幕分辨率列表中检测并希望获得最好的结果,我无法提出解决方案。

有什么想法吗?

【问题讨论】:

在这个里面放一个别针。您需要考虑 iOS 的“安全”区域,并且要使用 iOS 特定的媒体查询......需要查找内容......这可能是我目前所知道的关于 iPhone 特定布局 CSS @ 的最佳文章987654322@ 这是苹果的文章webkit.org/blog/7929/designing-websites-for-iphone-x 请注意,const 已更改为 env 你找到解决办法了吗?我正在为这个确切的事情而苦苦挣扎!这看起来很有希望,但我无法让它返回 0px 的任何内容:benfrain.com/… 【参考方案1】:

从this post 开始工作,我能够计算出底部安全区域的高度,从而确定主栏是否存在。如果您返回一个非零像素值,则主栏(可能)在那里。如果返回0px,则没有home bar。

一定要阅读链接的帖子,但一般的想法是您将CSS env() function 设置为:root 元素,然后读回计算的值。

工作原理如下:

首先,您需要使用整个可用屏幕,方法是将其放在文档的 <head> 部分:

<meta name="viewport" content="viewport-fit=cover" />

然后,添加到您的 CSS:

:root 
    --sat: env(safe-area-inset-top);
    --sar: env(safe-area-inset-right);
    --sab: env(safe-area-inset-bottom); /* THIS ONE GETS US THE HOME BAR HEIGHT */
    --sal: env(safe-area-inset-left);

最后,在 javascript 中读回该值:

getComputedStyle(document.documentElement).getPropertyValue("--sab")

当 home bar 存在时,它应该返回一个类似于 34px 的值,而当它不存在时,它应该返回一个类似于 0px 的值。

【讨论】:

以上是关于使用 JS 或 CSS 检测 iOS 设备是不是有 home bar的主要内容,如果未能解决你的问题,请参考以下文章

CSS媒体查询不足以检测超大型移动设备/平板电脑,而不是台式机[重复]

如何使用 CSS 或 JS 防止 iOS 键盘将视图推离屏幕

如何检测我的苹果设备是不是支持蓝牙低功耗

网页代码 JS代码 检测手机或是Pad设备 是不是安装某软件 之后做相应的跳转

用于检测设备是不是水平的 iOS 代码

使用移动网页检测设备上是不是已安装 Android 应用 - PHP 和 JS