js如何解决iphone异形屏适配(Html5适配iphoneX刘海屏的简单实现)
类别:Web前端 浏览量:1752
时间:2021-09-30 00:45:22 js如何解决iphone异形屏适配
Html5适配iphoneX刘海屏的简单实现iphonex的刘海屏且不说好看不好看,但是确实给开发造成一定困扰,有些PM希望产品能够全屏展示,于是客户端就把刘海以上的空间让出来让前端处理,造成一个问题就是当页面头部固定在顶部时,如果上下滑动页面会有较大缝隙出现,如果背景全是白色还好,否则跟断层了似的,非常难看。
iphone屏幕尺寸
iphoneX与其他机型尺寸上的差异
导致上述问题的原因就是iphoneX存在安全区域,安全区域指的是一个可视窗口范围,处于安全区域的内容不受圆角(corners)、齐刘海(sensor housing)、小黑条(Home Indicator)影响,如下图蓝色区域:
也就是说,我们要做好适配,必须保证页面可视、可操作区域是在安全区域内。
具体尺寸,详见Human Interface Guidelines – iPhoneX
如何适配?
第一步,设置网页在可视窗口的布局方式
<meta name=“viewport” content=“width=device-width, viewport-fit=cover”>
iOS11 新增特性,苹果公司为了适配 iPhoneX 对现有 viewport meta 标签的一个扩展,用于设置网页在可视窗口的布局方式,可设置三个值:
- contain: 可视窗口完全包含网页内容(左图)
- cover:网页内容完全覆盖可视窗口(右图)
- auto:默认值,跟 contain 表现一致
注意:网页默认不添加扩展的表现是 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函数替代
默认情况下,如果客户端处理了安全区域,效果如下:
使用全面屏viewport-fit=cover属性后:
安全区域图:
限定安全区域后效果图:
上面设置了padding为12像素,如果旋转方向后:
第三步,使用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)); } }
fixed元素固定问题
如果页面title是前端实现的,且固定在顶部,就会出现被遮挡的情况,这时候可以设置top值为安全距离值,比如:
.header{top:env(safe-area-inset-top);top:const(safe-area-inset-top);}
参考文章:Designing Websites for iPhone X
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- html5基本标签详解(HTML5 通过Vedio标签实现视频循环播放的示例代码)
- html5新增特性(总结html5自定义属性有哪些)
- h5打开小程序点允许(html5跳转小程序wx-open-launch-weapp踩坑)
- h5抽奖的弹框制作(html5实现九宫格抽奖可固定抽中某项奖品)
- html5元素列表(HTML5触摸事件touchstart、touchmove和touchend的实现)
- 如何获取html5表单中的元素的值(html5 datalist 选中option选项后的触发事件)
- html5中提供的绘图元素(使用Html5中的cavas画一面国旗)
- html5的canvas图形绘制技术(详解HTML5 Canvas标签及基本使用)
- html5 canvas 特效(JavaScript canvas实现流星特效)
- html5input标签的默认属性(移动端HTML5 input常见问题小结)
- html5常用标记(HTML5超文本标记语言的实现方法)
- html5字体倾斜代码(html5响应式开发自动计算fontSize的方法)
- html5添加背景(Html5实现首页动态视频背景的示例代码)
- html5怎么将字体变为红色(Html5自定义字体解决方法)
- html5实现上传图片预览
- 只用html5简单动画代码(HTML5 3D书本翻页动画的实现示例)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
- 小米音乐与 QQ 音乐合作,便捷迁移会员(小米音乐与QQ音乐合作)
- 小米推出米兔儿童电话手表奥特曼版,799 元,支持微信 QQ(小米推出米兔儿童电话手表奥特曼版)
- 贾怀胤唱《白龙马》 炸场 了 没想到京剧还能这么玩(贾怀胤唱白龙马)
- 白龙马的改编学生版,快来看看(白龙马的改编学生版)
- 萌娃唱《白龙马》走红,那生动的小表情,网友直呼 简直是戏精(萌娃唱白龙马走红)
热门推荐
- sqlserver2019使用教程图文(SQLServer2019 数据库环境搭建与使用的实现)
- sqlserver数据库的对象有哪些(详解SQL Server数据库架构和对象、定义数据完整性)
- 使用javascript数组循环(JavaScript数组reduce方法的语法与实例解析)
- 如何提高织梦dedecms的安全性(详解织梦DedeCMS幻灯片调用图片显示模糊的原因以及解决办法)
- mysql dateformat(MySQL的DATE_FORMAT函数的使用)
- python开启多线程(python 多线程重启方法)
- react跳转页面并传参数(react 跳转后路由变了页面没刷新的解决方案)
- 详解如何获取localStorage最大存储大小的方法(详解如何获取localStorage最大存储大小的方法)
- css长度单位有哪些(聊一聊CSS中的长度单位的使用)
- css的列表符号怎么设置(reset.css引入以及1px边框问题的解决方法)