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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- html5canvas怎么改扇形起始角(HTML5 Canvas实现放大镜效果示例)
- 如何替换html5视频播放器(HTML5自定义视频播放器源码)
- html5游戏新手引导开发(使用数据结构给女朋友写个Html5走迷宫游戏)
- HTMl5 sessionStorage和localStorage
- HTML5 <abbr>标签
- h5打开小程序点允许(html5跳转小程序wx-open-launch-weapp踩坑)
- html5新增全局属性(HTML5自定义属性的问题分析)
- html5视频播放(使用HTML5加载音频和视频的实现代码)
- html5基本结构图(HTML5中的网络存储实现方式)
- html5底部组件(HTML5 Blob对象的具体使用)
- html5播放器按菜单键没反应(解决HTML5中的audio在手机端和微信端的不能自动播放问题)
- html5 canvas 特效(JavaScript canvas实现流星特效)
- html5怎么修改背景颜色(HTML5 body设置全屏背景图片的示例代码)
- html5创作(HTML5录音实践总结Preact)
- vue加载html5动画(vue实现旋转木马动画)
- html5常用标记(HTML5超文本标记语言的实现方法)
- 泰国安全吗(泰国安全吗2023)
- 菲律宾安全吗(菲律宾安全吗)
- 泰国旅游攻略(泰国旅游攻略必去景点)
- 数字藏品市场有多乱 周杰伦丢了 一只猴 ,损失超300万(数字藏品市场有多乱)
- 这里输入关键词(怎么输入关键词搜索)
- 得这个 难治病 的人太多了,300个人赶到杭州商量怎么办(得这个难治病的人太多了)
热门推荐
- 织梦的控制层使用方法(织梦系统参数设置出现Token mismatch!提示的解决办法)
- thinkphp5框架怎么打开(thinkphp5.1框架模板布局与模板继承用法分析)
- display和visibility的用法和区别
- ASP.NET URL路径问题
- VPS主机如何预防挂马?(VPS主机如何预防挂马?)
- sql server 函数参数表(SQL Server 实现数字辅助表实例代码)
- 简述python2与python3的不同点(Python2与Python3的区别实例分析)
- vmware使用教程win10(VMware Workstation安装并安装WIN10操作系统连接外网步骤指导超详细教程)
- docker安装部署及使用(docker在linux上的安装部署实例讲解)
- 无法访问docker容器内的端口(docker容器中切换用户,提示权限不足的解决)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9