前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【HTML5 理论知识】就H5调试技巧,浅谈:iPhone X 适配方案!

【HTML5 理论知识】就H5调试技巧,浅谈:iPhone X 适配方案!

作者头像
QUXINGDONG.COM
发布于 2018-04-17 05:30:59
发布于 2018-04-17 05:30:59
3.3K20
代码可运行
举报
文章被收录于专栏:前端笔记前端笔记
运行总次数:0
代码可运行
iPhone X 适配方案 及 HT ML 5 调试技巧
iPhone X 适配方案 及 HT ML 5 调试技巧

2017年9月苹果发布了iPhone X机型,对于它的“刘海儿”和底部Home Indicator。我们可以通过以下三种方案进行适配~下面就让我来逐一介绍吧!

客户端适配

解决方案

客户端直接将webview的安全区域限制在除去安全区域的区域内。页面将展示在下图灰色webview内:

利弊分析

优点:H5前端开发没有任何适配工作量。

缺点:页面会限制在客户端限制的webview区域内,没有满屏效果。

使用media query

解决方案

针对iPhoneX机型在html结构的meta标签加入

<meta name=”viewport” content=”…,viewport-fit=cover” />

css中加入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
			@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) {{ padding-top: 44px; }{ padding-bottom: 34px; }
			}

适配效果

利弊分析

优点:对于iPhone X适配,最简单直接有效的方法,不会影响到其他iOS机型。

缺点:对于全屏/透顶标题栏/横屏情况都要用不同的css代码进行适配,不够灵活。另外,如果苹果下一年又发布了类似iPhone X plus这样的机型,适配工作就要重新来过。

使用苹果提供的新属性

解决方案

苹果对于iPhone X上H5页面的适配,提供了特殊属性支持,包括meta标签的viewport属性值中加入viewport-fit和加入constant(safe-area-inset-X)和env(safe-area-inset-X) ,这些属性是与iOS11以上的所有iPhone机型(不仅仅包括iPhone X)都相关的,故以iOS版本为区别具体分析一下全屏下的H5页面:

1. 针对iOS11.0以下系统:

将不识别H5页面meta标签下的viewport-fit及constant(safe-area-inset-X)/env(safe-area-inset-X)属性。

2. 针对于iOS11.0-iOS11.1的系统:

当设置了viewport-fit=cover,H5页面会覆盖页面安全区域全屏展示,但是这样会带来页面元素会被“刘海儿”和底部Home Indicator遮挡问题,所以苹果提供在css中设置constant(safe-area-inset-X)距离来规避遮挡问题。

这些在不同webview下会表现不同的值,我们留到后面分析。

另外,页面不加viewport-fit=cover默认viewport-fit=contain/auto,也就是我们看到的页面不能覆盖安全区域的情况,此时constant(safe-area-inset-X)的值都为0。

所以在meta标签的viewpoint中加viewport-fit=cover时iOS10和iOS11下constant(safe-area-inset-X)值的表现是不一样的。

3. 针对iOS11.2及iOS11.2以上的系统:

constant() function改成了env(),其他与iOS11.2以下表现一样(详见第2点)。另外,iOS11.2新增了CSS function: min()和max()。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
			padding-left: max(12px, env(safe-area-inset-left));

在env(safe-area-inset-left)值因为webview变化时值也可以做出相应变化,取12px和env(safe-area-inset-left)的较大值。

总结如下图:

在了解了以上情况后,大致可以知道如果要适配一个普通H5页面的顶部时,可以在meta标签的viewport属性中加入:

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

然后在需要的class里面加入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
			...{
			 padding-top: 20px; /* iOS 10 */
			 padding-top: constant(safe-area-inset-top); /* iOS 11.0-iOS 11.1 */
			 padding-top: env(safe-area-inset-top); /*iOS 11.2 */
			}

在iOS11机型上,H5加入viewport-fit=cover后,safeArea的值是基于“如果布局接触了非安全区域才会赋值”。所以在不同情况下会有不同表现。如下表所示:

适配结果

这里展示了iPhone8 / iPhone X (iOS11.2)透顶状态栏/透顶标题栏/普通标题栏下打开适配H5的效果图。

对应代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
			<!DOCTYPE html>
			<html>
			<head>
			 <meta charset="utf-8">
			 <title>test</title>
			 <meta name="viewport" content="width=device-width, initial-scale=1,minimum-scale=1, maximum-scale=1, user-scalable=no,viewport-fit=cover" />
			 <style type="text/css">
			 html {
			 background-color: #FFCD00;
			 }
			 html,body{
			 width: 100%;
			 height: 100%;
			 }
			 body, div{
			 margin: 0;
			 padding: 0;
			 }
			 .main{
			 font-size: 24px;
			 text-align: center;
			 width: 100%;
			 height: 100%;
			 padding-top: constant(safe-area-inset-top);
			 padding-top: env(safe-area-inset-top);
			 padding-bottom: constant(safe-area-inset-bottom);
			 padding-bottom: env(safe-area-inset-bottom);
			 box-sizing: border-box;
			 display: flex;
			 flex-direction: column;
			 justify-content: space-between;
			 }
			 </style>
			</head>
			<body>
			 <div class="main">
			 <div class="top">————顶部————</div>
			 <div class="bottom">————底部————</div>
			 </div>
			</body>
			</html>

利弊分析

优点:符合标准的适配,灵活运用的话,H5在不同webview下打开都可以有完美的展现。且考虑了未来机型的适配。

缺点:适配iPhone X时需要同时考虑其他iOS11机型下会不会受到影响。

以上只分析竖屏webview下的情况,横屏webview可以自行通过模拟器进行研究。接下来介绍一下模拟器的使用。

iPhone X模拟器 H5调试

介绍

加入适配代码后,在没iPhone X的情况下,可以通过iPhone X模拟器调试,像手机QQ/手机空间里的H5页面,可以通过在模拟器上安装手机QQ/手机空间app,然后调用Safari调试。

运行模拟器

系统要求:

1. Mac OS 10.12.6以上

2. Xcode9.0以上

步骤:在Xcode打开一个空白项目,选择iPhoneX模拟器,并点击运行按钮即可。

安装应用

在Xcode上直接编译客户端代码。或者让客户端开发编译一份模拟器版本的.app文件,将其拖进运行的模拟器屏幕,应用就成功安装了。

H5 调试

安装应用后,在应用里访问H5页面,然后打开Safari(需要开启Safari的开发工具),在菜单中选择开发-Simulator-页面地址 ,就可以用Safari的检查器对其作调试了。(当有多个页面地址,将鼠标移至二级菜单的某一个页面地址时,模拟器页面屏幕会有蓝色遮罩出现时则是选中了本页面地址),有些时候Safari识别不到模拟器,只需退出Safari,点一下模拟器屏幕,再重新打开Safari一般就会出来了。

这种方法对于我们要调试线上H5的其他问题、要测试其他iOS设备找不到真机时同样适用。

最后

经过分析,使用官方提供的新属性是三种里面较佳的方案,不过使用在适配过程中应当整体考虑所有机型,webview的类型及布局、还有横竖屏对contstant(safe-area-inset-X)/env(safe-area-inset-X)值的影响。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年1月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
2 条评论
热度
最新
很好的分析,最近作者怎么不更新啦。
很好的分析,最近作者怎么不更新啦。
回复回复点赞举报
谢谢楼主分享,正在找相关的文章。
谢谢楼主分享,正在找相关的文章。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
适配iPhone X 的齐刘海
当苹果宣布发布他们的旗舰手机-- iPhone X 的时候,他们允诺将为未来移动设备设定新的标准。我们决定需要了解一些内容。 “屏幕再也不必是方形的” 除了无边框设计,就是我们熟悉的“齐刘海”,官方叫:Sensor Housing。它迅速成为一个热门话题,提出了一种全新的设计挑战:屏幕再也不必是方形的。虽然这对原生应用是一个更大的考验,但web开发也需要一些考虑。不管它是吓到你或者激发了你, sensor housing 都已存在。现在是为你的客户提供一种非常整洁体验的绝
前端黑板报
2018/01/29
9980
适配iPhone X 的齐刘海
Web App 一分钟适配 iPhone X
iPhone X 已经开抢了,然而面对 iPhone X 这个奇葩的屏幕,你准备好了吗?
蜻蜓队长
2018/08/03
7380
Web App 一分钟适配 iPhone X
吃透移动端 H5 与 Hybrid|实践踩坑12种问题汇总
作为一个开发了多个 H5 项目的前端工程师,在开发过程中难免会遇到一些兼容性等爬过坑的问题。现在我将这些问题一一汇总一下,并在后面给出坑产生的原理,和现阶段常规的填坑方案。由此来做一个阶段性的总结。
前端老道
2020/10/15
1.3K0
吃透移动端 H5 与 Hybrid|实践踩坑12种问题汇总
20180914_ARTS_week12
因为之前做过 Integer to Roman 这个 Roman to Integer 还是比较容易有思路,和 Integer to Roman 差不多,但是这里要先算组合型的字符,比如 CM 就要在 M 之前计算。
Bob.Chen
2018/09/27
3540
CSS适配iOS全面屏底部横条
所有开发者应对资源页面做好不同手机型号的适配效果,不影响用户的正常浏览使用。其中IOS全面屏手机底部横线不可遮挡页面的具体功能和内容。
AlexTao
2021/03/29
3.7K0
CSS适配iOS全面屏底部横条
开发 | 小程序如何快速适配 iPhone X?
但是,由于 iPhone X 的「异型」屏幕,以及底部的「小白条」的存在,不少开发者都头疼应该如何适配这块略显奇怪的屏幕。
知晓君
2018/07/26
1.8K0
极速适配 iPhone X 秘笈
iPhone X 适配方案 2017年9月苹果发布了 iPhone X 机型,对于它的“刘海儿”和底部 Home Indicator,QQ空间 H5 也在第一时间做了兼容适配。在适配过程中,我们尝试了这三种方案,如下。 解决方案1 客户端适配 客户端直接将 webview 的安全区域限制在除去安全区域的区域内。页面将展示在下图灰色 webview 内: 利弊分析 优点:H5 前端开发没有任何适配工作量。 缺点:页面会限制在客户端限制的 webview 区域内,没有满屏效果。 解决方案2 使用 media
腾讯ISUX
2018/06/29
1.3K0
让你的WEB和APP一分钟适配 iPhone X
iPhone X昨日已经开抢了 然而面对 iPhone X 这个奇葩的屏幕 你和你的编辑器准备好了吗? 因为 iPhone X 的刘海设计,Web 在 iPhone X横屏时,可能会有些问题: 默认
腾讯NEXT学位
2018/05/14
1.3K0
妙用 CSS 变量,让你的代码更优雅
这是介绍 css 的基础语法,了解地可以直接跳过到实际 demo . 既然是变量,他跟 JS 的变量很像,分为 声明、使用、作用域 三块。
Power
2025/03/04
330
–移动端适配iPhoneX方案
移动端适配iPhoneX方案 对页面进行iPhoneX适配处理教程 在viewport 中添加 viewport-fit=cover 属性 <meta name="viewport" content="width=device-width,initial-scale=1.0, viewport-fit=cover"> 安全区设置 iOS 11中包含了一个新的CSS函数 env(),以及一组四个预定义的常量:safe-area-inset-left, safe-area-inset-right, safe-a
大象无痕
2018/07/17
1K0
H5 页面 iPhoneX 刘海屏适配
对于刘海屏的适配,你的脑子里首先得有苹果手机的 Safe Area 的概念,关于 Safe Area 网上的资料已经非常多了,这里就不再赘述,更偏向实战一点。但是为了比较,我这里给出一张苹果官方文档中,iPhone8之前的常规屏幕和刘海屏 Safe Area 区域的对比图。
Originalee
2020/06/02
4.4K1
H5 页面 iPhoneX 刘海屏适配
📚一站式解决:H5开发全攻略,看这篇让你省时又省力
在 H5 中,我们通常会使用 REM 和 VW 这两种单位来实现页面的响应式布局。这两种单位可以让页面元素的大小随着根元素(对于 REM)或视口宽度(对于 VW)的大小变化而变化,从而适应不同尺寸的屏幕。
linwu
2023/07/27
9420
原 适配iPhoneX
作者:汪娇娇 时间:2017年12月26日 我这里说的适配iPhoneX,是一种比较简单粗暴的适配法,就是填满整个屏幕(包括安全区域和上下左右这些边,见下图)。 1、meta标签 <meta name
jojo
2018/05/03
6340
原                                                                                适配iPhoneX
H5移动端适配IphoneX等机型
图中,Iphonex机型在头部和底部新增了这两个区域,所以我们需要针对这类机型做些适配,方便我们的webapp的展示
青梅煮码
2023/01/12
8410
网页适配 iPhoneX
iPhoneX 取消了物理按键,改成底部小黑条,这一改动导致网页出现了比较尴尬的屏幕适配问题。对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可(即常见的吸底导航、返回顶部等各种相对底部 fixed 定位的元素)。
子润先生
2021/06/24
6930
iPhone X 适配手Q H5 页面通用解决方案
本文总结
林焕彬
2017/11/10
13.2K1
iPhone X 适配手Q H5 页面通用解决方案
移动端H5开发之页面适配篇
最近开发并上线了一款H5项目,在这里想和大家分享一下关于项目中使用到的移动端适配技巧,如果对你们有所帮助的话,就多多点赞收藏😃各位看官老爷别着急,在讲页面适配之前,我们先来捋一捋viewport(视口)的概念~在Web浏览器术语中,通常与浏览器窗口相同,但不包括浏览器的UI, 菜单栏等——即指你正在浏览的文档的那一部分。一般我们所说的视口共包括三种:布局视口、视觉视口和理想视口1.1 布局视口图片在移动端,布局视口被赋予一个默认值,大部分为980px,这保证PC的网页可以在手机浏览器上呈现,用户可以手动对网
三点水的洋
2022/06/10
7.6K1
移动端H5开发之页面适配篇
Iphone X 下的适配
为了避免 iphoneX 的刘海和底部出现空白,苹果已经把 viewport-fit 增加到了 CSS Round Display 规范中。通过设置 viewport-fit 的值让 viewport 填充满整个屏幕。 为了避免填充满屏幕后页面内容被刘海底部挡住,使用 env 函数设置 padding 值。
上山打老虎了
2022/06/15
2810
兼容iphone x * 刘海的正确姿势
9月13日凌晨终于等来了万众瞩目的苹果新品发布会,相信很多小伙伴们都期待新 iphone 可以剪掉刘海胡子,但万万没想到的是等来了三款不同的尺寸的 iphone x ,我的天,等了这么久你给我看这个?码农慌得一批满地找新 iphone 的逻辑像素,然后想着怎么兼容这刘海和胡子。
IMWeb前端团队
2019/12/03
1.1K0
兼容iphone x * 刘海的正确姿势
iphoneX 兼容
iphone 齐刘海兼容,作为前端开发几乎是绕不过去的一道坎。 很早之前就遇到过,这里记录一下其解决办法。
epoos
2022/06/06
1K0
相关推荐
适配iPhone X 的齐刘海
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验