Html5适配iphoneX刘海屏的简单实现


Posted in HTML / CSS onApril 09, 2019

iphonex的刘海屏且不说好看不好看,但是确实给开发造成一定困扰,有些PM希望产品能够全屏展示,于是客户端就把刘海以上的空间让出来让前端处理,造成一个问题就是当页面头部固定在顶部时,如果上下滑动页面会有较大缝隙出现,如果背景全是白色还好,否则跟断层了似的,非常难看。

iphone屏幕尺寸

Html5适配iphoneX刘海屏的简单实现

Html5适配iphoneX刘海屏的简单实现

iphoneX与其他机型尺寸上的差异

Html5适配iphoneX刘海屏的简单实现

导致上述问题的原因就是iphoneX存在安全区域,安全区域指的是一个可视窗口范围,处于安全区域的内容不受圆角(corners)、齐刘海(sensor housing)、小黑条(Home Indicator)影响,如下图蓝色区域:

Html5适配iphoneX刘海屏的简单实现

也就是说,我们要做好适配,必须保证页面可视、可操作区域是在安全区域内。

具体尺寸,详见Human Interface Guidelines – iPhoneX

如何适配?

第一步,设置网页在可视窗口的布局方式
<meta name=“viewport” content=“width=device-width, viewport-fit=cover”>

iOS11 新增特性,苹果公司为了适配 iPhoneX 对现有 viewport meta 标签的一个扩展,用于设置网页在可视窗口的布局方式,可设置三个值:

  • contain: 可视窗口完全包含网页内容(左图)
  • cover:网页内容完全覆盖可视窗口(右图)
  • auto:默认值,跟 contain 表现一致

Html5适配iphoneX刘海屏的简单实现

注意:网页默认不添加扩展的表现是 viewport-fit=contain,需要适配 iPhoneX 必须设置 viewport-fit=cover,这是适配的关键步骤。
具体详见:The viewport-fit descriptor
第二步,页面主体内容限定在安全区域内
.post {
    padding: 12px;
    padding-left: env(safe-area-inset-left);
    padding-left: const(safe-area-inset-left);
    padding-right: env(safe-area-inset-right);
    padding-right: const(safe-area-inset-right);
}

constant 函数

iOS11 新增特性,Webkit 的一个 CSS 函数,用于设定安全区域与边界的距离,有四个预定义的变量:

  • safe-area-inset-left:安全区域距离左边边界距离
  • safe-area-inset-right:安全区域距离右边边界距离
  • safe-area-inset-top:安全区域距离顶部边界距离
  • safe-area-inset-bottom:安全区域距离底部边界距离
注意:部分浏览器已经不支持constant函数,用env函数替代

默认情况下,如果客户端处理了安全区域,效果如下:

Html5适配iphoneX刘海屏的简单实现

使用全面屏viewport-fit=cover属性后:

Html5适配iphoneX刘海屏的简单实现

安全区域图:

Html5适配iphoneX刘海屏的简单实现

限定安全区域后效果图:

Html5适配iphoneX刘海屏的简单实现

上面设置了padding为12像素,如果旋转方向后:

Html5适配iphoneX刘海屏的简单实现

第三步,使用min()和max()方法
@supports(padding: max(0px)) {
    .post {
        padding-left: max(12px, env(safe-area-inset-left));
        padding-right: max(12px, env(safe-area-inset-right));
    }
}

Html5适配iphoneX刘海屏的简单实现

fixed元素固定问题

如果页面title是前端实现的,且固定在顶部,就会出现被遮挡的情况,这时候可以设置top值为安全距离值,比如:

.header{top:env(safe-area-inset-top);top:const(safe-area-inset-top);}

参考文章:Designing Websites for iPhone X

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
介绍CSS3使用技巧5个
Apr 02 HTML / CSS
CSS3中31种选择器使用方法教程
Dec 05 HTML / CSS
css3 中的新特性加强记忆详解
Apr 16 HTML / CSS
CSS3 input框的实现代码类似Google登录的动画效果
Aug 04 HTML / CSS
Html5 postMessage实现跨域消息传递
Mar 11 HTML / CSS
html5适合移动应用开发的12大特性
Mar 19 HTML / CSS
HTML5添加鼠标悬浮音响效果不使用FLASH
Apr 23 HTML / CSS
HTML5 创建canvas元素示例代码
Jun 04 HTML / CSS
针对HTML5的Web Worker使用攻略
Jul 12 HTML / CSS
Html5移动端网页端适配(js+rem)
Feb 03 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
Feb 24 HTML / CSS
使用 CSS 构建强大且酷炫的粒子动画效果
Aug 14 HTML / CSS
html5唤醒APP小记
Mar 27 #HTML / CSS
html5录音功能实战示例
Mar 25 #HTML / CSS
浅析HTML5中的download属性使用
Mar 13 #HTML / CSS
手把手教你实现一个canvas智绘画板的方法
Mar 04 #HTML / CSS
详解h5页面在不同ios设备上的问题总结
Mar 01 #HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
Feb 20 #HTML / CSS
h5网页水印SDK的实现代码示例
Feb 19 #HTML / CSS
You might like
当海贼王变成JOJO风
2020/03/02 日漫
精通php的十大要点(上)
2009/02/04 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
vue项目中axios使用详解
2018/02/07 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
Python splitlines使用技巧
2008/09/06 Python
对Python3 序列解包详解
2019/02/16 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Python如何急速下载第三方库详解
2020/11/02 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
伦敦一卡通:The London Pass
2018/11/30 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
2014年计生协会工作总结
2014/11/21 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
同学聚会通知书
2015/04/20 职场文书
校长新学期致辞
2015/07/30 职场文书
安全教育主题班会教案
2015/08/12 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python
关于Python使用turtle库画任意图的问题
2022/04/01 Python