javascript - 使用 JS 或 CSS 检测 iOS 设备是否有 home bar
问题描述
我正在为 iOS 构建一个 Web 应用程序,并想知道是否可以使用 JS 或 CSS 来检测设备底部是否有屏幕 Home Bar(即 iPhone X、11 或 iPad Pro - 带有圆角并且没有主页按钮)。
因为如果创建一个标签栏,我需要知道是否在底部添加额外的填充来适应它,如下图所示。
没有使用媒体查询从这些设备的精确屏幕分辨率列表中检测并希望获得最好的结果,我无法提出解决方案。
有什么想法吗?
解决方案
通过这篇文章,我能够计算出底部安全区域的高度,从而确定主栏是否存在。如果您返回一个非零像素值,则主栏(可能)在那里。如果它返回0px
,则没有 home 栏。
一定要阅读链接的帖子,但一般的想法是你将CSSenv()
函数设置为: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")
这应该返回一个值,例如34px
主栏出现0px
时和不出现时。
推荐阅读
- security - 唯一哈希作为端点的授权
- javascript - 隐藏div中的php src值更改
- unit-testing - 在 Foq 中模拟具有虚拟内部可设置属性的抽象类
- python-c-api - 从元组解析两个字节时无法访问的内存
- laravel-5.6 - 碳 setTestNow 功能不起作用
- c# - 从装饰属性中提取属性数据
- openssl - 无法使用 OpenSSL 1.1.1 构建 activemq CMS 3.9.5
- javascript - 如何使用正则表达式验证 UPI ID?
- node.js - 使用节点证书的 Google IAP 已过期错误?
- php - 从输入到数组到mysqli表A,并更新表B