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 相关文章推荐
css动画效果之animation的常用样式
Mar 09 HTML / CSS
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
Feb 04 HTML / CSS
可以随进度显示不同颜色的css3进度条分享
Apr 11 HTML / CSS
css3实现3D色子翻转特效
Dec 23 HTML / CSS
CSS3实现div从下往上滑入滑出效果示例
Apr 28 HTML / CSS
使用HTML5捕捉音频与视频信息概述及实例
Aug 22 HTML / CSS
HTML5 Web 存储详解
Sep 16 HTML / CSS
HTML5 用动画的表现形式装载图像
Mar 08 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
Mar 15 HTML / CSS
HTML5+CSS3实现机器猫
Oct 17 HTML / CSS
Canvas实现放大镜效果完整案例分析(附代码)
Nov 26 HTML / CSS
如何解决flex文本溢出问题小结
Jul 15 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
移动端界面的适配
2017/01/11 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python CSV模块使用实例
2015/04/09 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
python使用selenium实现批量文件下载
2019/03/11 Python
django 类视图的使用方法详解
2019/07/24 Python
python批量修改ssh密码的实现
2019/08/08 Python
Python函数基本使用原理详解
2020/03/19 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
被委托人身份证明
2015/08/07 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers