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代码绘制可爱的Hello Kitty猫
Aug 03 HTML / CSS
css3个性化字体_动力节点Java学院整理
Jul 12 HTML / CSS
纯HTML+CSS3制作导航菜单(附源码)
Apr 24 HTML / CSS
使用CSS3配合IE滤镜实现渐变和投影的效果
Sep 06 HTML / CSS
实例讲解CSS3中的box-flex弹性盒属性布局
Jun 09 HTML / CSS
浅析CSS3 中的 transition,transform,translate之间区别和作用
Mar 26 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
Jan 27 HTML / CSS
Html5画布_动力节点Java学院整理
Jul 13 HTML / CSS
canvas探照灯效果的示例代码
Nov 30 HTML / CSS
HTML页面中使两个div并排显示的实现
May 15 HTML / CSS
HTML5之高度塌陷问题的解决
Jun 01 HTML / CSS
CSS浮动引起的高度塌陷问题
Aug 05 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
php smarty模板引擎的6个小技巧
2014/04/24 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
document.createElement()用法
2013/03/13 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
javascript 实现map集合
2015/04/03 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
Python实现简单http服务器
2018/04/12 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
基于python 取余问题(%)详解
2020/06/03 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
法制教育演讲稿
2014/09/10 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
如何判断pytorch是否支持GPU加速
2021/06/01 Python
MongoDB支持的数据类型
2022/04/11 MongoDB