首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >H5 页面 iPhoneX 刘海屏适配

H5 页面 iPhoneX 刘海屏适配

作者头像
Originalee
发布于 2020-06-02 07:14:36
发布于 2020-06-02 07:14:36
4.6K00
代码可运行
举报
文章被收录于专栏:编程之旅编程之旅
运行总次数:0
代码可运行

随着这两年苹果坚定不移的走刘海屏路线,Hybrid 页面在 iPhoneX 上刘海屏的适配也是每个前端开发的小伙伴都会碰到的问题,今天就记录一下我关于刘海屏适配的部分经验。

对于刘海屏的适配,你的脑子里首先得有苹果手机的 Safe Area 的概念,关于 Safe Area 网上的资料已经非常多了,这里就不再赘述,更偏向实战一点。但是为了比较,我这里给出一张苹果官方文档中,iPhone8之前的常规屏幕和刘海屏 Safe Area 区域的对比图。

safe-area.png

很明显,在讨论适配之前,我们的页面一般有两种分类:

  • 1、H5 页面使用原生 App 的 Navigation Bar 导航栏,此时,status bar 状态栏和导航栏都是原生控件,我们只需要专注的适配底部小黑条处的高度差异即可。
  • 2、H5 页面在 iOS 中占据全屏页面,在这种情况下,除了要兼顾底部小黑条,我们还要处理页面上部跟 状态栏接触的部分,避免内容出现在状态栏上。

env 函数

在介绍适配之前,我们先说一下适配用到的关键 CSS 函数 —— env()env()函数以类似于var函数的方式将用户代理定义的环境变量值插入到你的 CSS 中去。这个函数最初由 iOS 浏览器提供,用于允许开发人员将其内容放置在视口的安全区域中,该规范中定义的 safe-area-inset-* 值用于确保内容即使在非矩形的视区中也可以完全显示。

页面适配

在为页面适配刘海屏之前,我们首先得在页面的 meta 中添加一个新的值:viewport-fit=cover

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<meta name="viewport" content="viewport-fit=cover">

这么设置之后,视图端口被缩放以填充设备显示。换句话说就是网页会扩展到整个屏幕。

看一页目前的页面效果:

WX20200531-205514@2x.png

可以看到现在我们的测试页面已经铺满了整个屏幕。

这个时候,我们来使用之前提到的 env 函数,适配刘海屏幕。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body {
  padding:
    constant(safe-area-inset-top)
    constant(safe-area-inset-right)
    constant(safe-area-inset-bottom)
    constant(safe-area-inset-left); /* 兼容 iOS < 11.2 */
  padding:
    env(safe-area-inset-top)
    env(safe-area-inset-right)
    env(safe-area-inset-bottom)
    env(safe-area-inset-left); /* 兼容 iOS >= 11.2 */
}

为什么这里会使用 constant 呢?源于官方文档的一段注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
The env() function shipped in iOS 11 with the name constant(). Beginning with Safari Technology Preview 41 and the iOS 11.2 beta, constant() has been removed and replaced with env(). You can use the CSS fallback mechanism to support both versions, if necessary, but should prefer env() going forward.

意味着 iOS11.2 以后 constant() 不能使用,所以需要向后兼容。

此时再看一下我们的页面效果:

WX20200531-205644@2x.png

WX20200531-205658@2x.png

可以看到页面的顶部,因为 safe-area-inset-top 避开了状态栏,而底部因为 safe-area-inset-bottom 避开了小黑条,完美的显示在了 Safe Area 的区域中。

当你的页面不使用原生导航栏铺在整个屏幕中时,这就是一个不错的适配方案。

而当你使用了原生导航栏,仅仅需要适配底部小黑条时,解决方案就更简单了,简单设置 safe-area-inset-bottom就可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body {
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);
}

处理 Fixed 和 绝对定位的情况

有时我们底部的元素是通过 fixed 或者 absolute 定位放置的,例如底部的按钮、工具栏等等,对于这些元素,简单的使用 safe-area-inset-bottom 是无效的,但是我们可以对该元素单独增加内边距的 padding 来解决。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.element {
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);
}

或者通过增加该元素的高度来解决

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@element-height: 60px; /* 元素原始高度 */
.element {
  height: calc(@element-height + constant(safe-area-inset-bottom));
  height: calc(@element-height + env(safe-area-inset-bottom));
}

以及你可以通过 less、sass 的函数,通过媒体查询来准确的定位到刘海屏的手机,然后写入你希望刘海屏手机展示的任何样式。

下面我就放一个我写的 less 适配刘海屏的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *  适配 iPhoneX 及以后的刘海屏手机,可以自行编写 rules 规则
 */
.safe-area(@rules) {
  /* iphone x / xs / 11 pro*/
  @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) { @rules(); }
  /* iphone xr / 11  stackoverflow 提供判断 */
  @media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) { @rules(); }
  // 实际可用的 xr 判断
  @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 2) { @rules(); }
  /* iphone xs max / 11 pro max */
  @media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) { @rules(); }
}

// 具体使用
.safe-area({
  height: 100px;
  padding-bottom: env(safe-area-bottom-height);
});

当编译后,就可以根据机型完成适配。这里要注意的是,实测时,对于 iPhone XR 我用在 stackoverflow 上找到的 media query 条件来判断不生效,后来经过查找资料,我找到一个在 iPhone XR 上实际可用的条件,也一并放在上面的代码中。

最后,如果这篇文章有帮助到你在适配中填坑,请给我点个赞哦 ?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
加州大学伯克利分校研究人员推出无监督强化学习基准 (URLB)
强化学习 (RL) 是一种强大的人工智能范式,用于处理各种问题,包括自动驾驶汽车控制、数字助理和资源分配等。然而即使是当今最好的 RL 代理也很窄。目前大部分 RL 算法只能解决他们所训练的单一工作,没有跨任务或跨域泛化能力。
代码医生工作室
2021/12/29
6150
加州大学伯克利分校研究人员推出无监督强化学习基准 (URLB)
强化学习也能预训练?效果可提升20倍,华人新作引爆RL新范式!
从计算机视觉到自然语言处理等多个领域,这种「预训练-微调」的模式已经取得了巨大成功。
新智元
2025/06/30
680
强化学习也能预训练?效果可提升20倍,华人新作引爆RL新范式!
【越好奇,越强大】伯克利研究人员使用内在激励,教AI学会好奇
来源:Quanta Magazine 编译:Cecilia 【新智元导读】伯克利研究人员正在开发具有好奇心的AI。他们想创造有内在自我驱动能力的AI,而不是依赖人类指令的伪智能。相比外在的奖惩机制,建立方法让智能体拥有内在的好奇心更加重要。研究人员将让AI感到“吃惊”的指数,即对环境预测的误差,作为内在激励函数。吃惊越大,奖励越多,以此让AI迅速掌握环境。 你可能不记得第一次玩“超级马里奥兄弟”是什么感觉,但试着想像一下:蓝色的天空,棋盘石的地面,还有一个蹲着的红色男人在静静等待。他面向右方,你把他推到那个
新智元
2018/03/21
9200
【越好奇,越强大】伯克利研究人员使用内在激励,教AI学会好奇
加州大学伯克利分校研究人员开源RAD来改进强化学习算法
作者 | Michael Laskin、Kimin Lee、Adam Stooke、Lerrel Pinto、Pieter Abbeel、
代码医生工作室
2020/06/16
9440
加州大学伯克利分校研究人员开源RAD来改进强化学习算法
学界 | 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习
通过与任务匹配的奖励函数最大化来训练智能体策略。对于智能体来说,奖励是外在的,并特定于它们定义的环境。只有奖励函数密集且定义良好时,多数的 RL 才得以成功实现,例如在电子游戏中的「得分」。然而设计一个定义良好的奖励函数非常困难。除了「塑造」外在奖励外,也可以增加密集的内在奖励,即由智能体本身产生奖励。内在奖励包括使用预测误差作为奖励信号的「好奇心」和阻止智能体重新访问相同状态的「访问计数」。其思想是,这些内在奖励通过引导智能体对环境进行有效地探索,以寻找下一个外在奖励,从而缩小与稀疏外在奖励间的差距。
机器之心
2018/09/20
4290
学界 | 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习
系统回顾深度强化学习预训练,在线、离线等研究这一篇就够了
近年来,强化学习 (RL) 在深度学习的带动下发展迅速,从游戏到机器人领域的各种突破,激发了人们对设计复杂、大规模 RL 算法和系统的兴趣。然而,现有 RL 研究普遍让智能体在面对新的任务时只能从零开始学习,难以利用预先获取的先验知识来辅助决策,导致很大的计算开销。
机器之心
2022/12/16
8380
系统回顾深度强化学习预训练,在线、离线等研究这一篇就够了
强化学习如何使用内在动机?
「内在动机」 (Intrinsic Motivation) 这一概念最初是在心理学中提出并发展起来的。由于其在制造开放式学习机器和机器人方面的潜力,这一概念正日益受到认知科学的关注。
机器之心
2020/05/26
8280
强化学习如何使用内在动机?
深度 | 超越DQN和A3C:深度强化学习领域近期新进展概览
我觉得,深度强化学习最让人喜欢的一点是它确实实在难以有效,这一点不同于监督学习。用神经网络来解决一个计算机视觉问题可能能达到 80% 的效果;而如果用神经网络来处理强化学习问题,你可能就只能眼睁睁地看着它失败——而且你每次尝试时遭受的失败都各不相同。
机器之心
2018/12/06
7540
深度 | 超越DQN和A3C:深度强化学习领域近期新进展概览
如何解决稀疏奖励下的强化学习?
强化学习(Reinforcement Learning,RL)是实现强人工智能的方法之一,在智能体(Agent)与环境的交互过程中,通过学习策略(Policy)以最大化回报或实现特定的目标。在实际应用场景中,RL 面临一个重要的问题:agent 无法得到足够多的、有效的奖励(Reward),或者说 agent 得到的是稀疏奖励(Sparse Reward),进而导致 agent 学习缓慢甚至无法进行有效学习。
机器之心
2020/07/09
4.4K0
如何解决稀疏奖励下的强化学习?
只用图像也能思考,强化学习造就推理模型新范式!复杂场景规划能力Max
近年来,LLM 及其多模态扩展(MLLM)在多种任务上的推理能力不断提升。然而, 现有 MLLM 主要依赖文本作为表达和构建推理过程的媒介,即便是在处理视觉信息时也是如此 。
机器之心
2025/05/26
1550
只用图像也能思考,强化学习造就推理模型新范式!复杂场景规划能力Max
打通智能体「自我进化」全流程!复旦推出通用智能体平台AgentGym
LLM-based Agent,已经不再需要人类监督者的帮助,开始实现「自我进化」!
机器之心
2024/06/17
4380
强化学习也有基础模型了!DeepMind重磅发布AdA,堪比人类的新环境适应能力
---- 新智元报道   编辑:LRS 【新智元导读】强化学习也要进入预训练时代了! 基础模型(foundation models)在监督和自监督学习问题上展现出强大的领域适应性(adaption)和可扩展性(scalability),但强化学习领域仍然没有基础模型。 最近DeepMind的Adaptive Agents团队提出了一种人-时间尺度(human-timescale)自适应智能体AdA(Adaptive Agent),证明经过大规模训练后的RL智能体也能具有通用上下文的学习能力,该算法可以
新智元
2023/02/24
5450
强化学习也有基础模型了!DeepMind重磅发布AdA,堪比人类的新环境适应能力
大视频模型是世界模型?DeepMind/UC伯克利华人一作:预测下一帧就能改变世界
但Google DeepMind、UC伯克利和MIT的研究人员更进一步,在他们眼里,「大视频模型」也许能够像世界模型一样,真正的做到理解我们身处的这个世界。
新智元
2024/03/05
1750
大视频模型是世界模型?DeepMind/UC伯克利华人一作:预测下一帧就能改变世界
DeepSeekMath:突破开放式语言模型中数学推理能力的极限,提出了GRPO,值得关注学习
由于数学推理具有复杂且结构化的特性,这对语言模型构成了重大挑战。在本文中,我们介绍了 DeepSeekMath 7B 模型,该模型在 DeepSeek-Coder-Base-v1.5 7B 模型的基础上,使用从 Common Crawl 获取的 1200 亿个与数学相关的标记,以及自然语言和代码数据继续进行预训练。在不依赖外部工具包和投票技术的情况下,DeepSeekMath 7B 在竞赛级 MATH 基准测试中取得了 51.7% 的优异成绩,接近 Gemini-Ultra 和 GPT-4 的性能水平。通过对 DeepSeekMath 7B 生成的 64 个样本进行自洽性验证,其在 MATH 基准测试上的准确率达到了 60.9%。DeepSeekMath 的数学推理能力归因于两个关键因素:首先,我们通过精心设计的数据选择流程,充分利用了公开可用的网络数据的巨大潜力。其次,我们引入了组相对策略优化(Group Relative Policy Optimization,GRPO)算法,这是近端策略优化(Proximal Policy Optimization,PPO)算法的一个变体,它在增强数学推理能力的同时,还能优化 PPO 的内存使用。
AI浩
2025/06/08
1600
DeepSeekMath:突破开放式语言模型中数学推理能力的极限,提出了GRPO,值得关注学习
UC伯克利等新算法让四足机器人“稳得一批”:跨石滩、过草地…泼了油也不打滑!
人类具有适应环境变化的强大能力:我们可以迅速地学会住着拐杖走路、也可以在捡起位置物品时迅速地调整自己的力量输出,甚至小朋友在不同地面上行走都能轻松自如地切换自己的步态和行走模式。这样的适应能力对于在复杂多变的环境中生存活动十分重要。
大数据文摘
2021/07/29
6580
性能提升、成本降低,这是分布式强化学习算法最新研究进展
深度强化学习(Deep Reinforcement Learning,DRL)是一种公认的解决连续决策问题的有效技术。为了应对 DRL 的数据低效(data inefficiency)问题,受到分布式机器学习技术的启发,分布式深度强化学习 (distributed deep reinforcement learning,DDRL) 已提出并成功应用于计算机视觉和自然语言处理领域。有观点认为,分布式强化学习是深度强化学习走向大规模应用、解决复杂决策空间和长期规划问题的必经之路。
机器之心
2024/02/26
4680
性能提升、成本降低,这是分布式强化学习算法最新研究进展
让机器像人类一样学习? 伯克利 AI 研究院提出新的元强化学习算法!
AI 科技评论按:如果要让机器人拥人的学习能力,应该怎么做?伯克利 AI 研究院给出了一个很好的答案——元强化学习(meta-RL)。但这一次伯克利 AI 研究院不只是使用了元强化学习,还考虑POMDP、异步策略梯度等等知识体系,最终得到了一个高样本效率、高探索效率的新算法「PEARL」。这一成果不仅为解决 AI 的实际问题提供新的思考角度;同时也是实现在现实系统中规模化应用元强化学习的的第一步。伯克利 AI 研究院发布博文介绍了这一成果,AI 科技评论编译如下。
AI科技评论
2019/06/18
4660
让机器像人类一样学习? 伯克利 AI 研究院提出新的元强化学习算法!
1/10训练数据超越GPT-4o!清华等提出隐式过程奖励模型PRIME,在线刷SOTA
近日,来自清华UIUC等机构的研究者提出了PRIME(Process Reinforcement through IMplicit REwards):通过隐式奖励来进行过程强化。
新智元
2025/02/15
940
1/10训练数据超越GPT-4o!清华等提出隐式过程奖励模型PRIME,在线刷SOTA
「人造太阳」精准放电!DeepMind实现AI可控核聚变新突破
秘密研发3年,DeepMind去年宣称,首次成功用AI控制「托卡马克」内部等离子体。其重磅成果登上Nature。
新智元
2023/08/07
3960
「人造太阳」精准放电!DeepMind实现AI可控核聚变新突破
大型语言模型的幻觉研究|减轻及避免大模型LLM幻觉(二)
“ 本文及上一篇综述了最近关于语言模型中幻觉问题的研究进展,主要集中在ChatGPT发布后的研究。文章讨论了如何评估、追踪和消除幻觉,并探讨了现有挑战和未来方向。希望本文能为对LLM幻觉问题感兴趣的朋友提供有价值的资源,促进LLM的实际应用。”
技术人生黄勇
2024/07/19
9080
大型语言模型的幻觉研究|减轻及避免大模型LLM幻觉(二)
推荐阅读
加州大学伯克利分校研究人员推出无监督强化学习基准 (URLB)
6150
强化学习也能预训练?效果可提升20倍,华人新作引爆RL新范式!
680
【越好奇,越强大】伯克利研究人员使用内在激励,教AI学会好奇
9200
加州大学伯克利分校研究人员开源RAD来改进强化学习算法
9440
学界 | 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习
4290
系统回顾深度强化学习预训练,在线、离线等研究这一篇就够了
8380
强化学习如何使用内在动机?
8280
深度 | 超越DQN和A3C:深度强化学习领域近期新进展概览
7540
如何解决稀疏奖励下的强化学习?
4.4K0
只用图像也能思考,强化学习造就推理模型新范式!复杂场景规划能力Max
1550
打通智能体「自我进化」全流程!复旦推出通用智能体平台AgentGym
4380
强化学习也有基础模型了!DeepMind重磅发布AdA,堪比人类的新环境适应能力
5450
大视频模型是世界模型?DeepMind/UC伯克利华人一作:预测下一帧就能改变世界
1750
DeepSeekMath:突破开放式语言模型中数学推理能力的极限,提出了GRPO,值得关注学习
1600
UC伯克利等新算法让四足机器人“稳得一批”:跨石滩、过草地…泼了油也不打滑!
6580
性能提升、成本降低,这是分布式强化学习算法最新研究进展
4680
让机器像人类一样学习? 伯克利 AI 研究院提出新的元强化学习算法!
4660
1/10训练数据超越GPT-4o!清华等提出隐式过程奖励模型PRIME,在线刷SOTA
940
「人造太阳」精准放电!DeepMind实现AI可控核聚变新突破
3960
大型语言模型的幻觉研究|减轻及避免大模型LLM幻觉(二)
9080
相关推荐
加州大学伯克利分校研究人员推出无监督强化学习基准 (URLB)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验