iPhone X适配

1 篇文章 0 订阅
1 篇文章 0 订阅

识别iPhone X

在机器上识别iPhone X可以通过以下的两种简单方式实现

通过screen对象
var isIphoneX = window.screen.width === 375 && window.screen.height === 812
通过screen对象和devicePixelRatio
var { width, height } = window.screen
var ratio = window.devicePixelRatio
var isIphoneX = width * ratio === 1125 && height * ratio === 2436

以上两种方法并没有本质上的区别,当然还有很多种其它方法可以识别iPhone X机型,比如UA

// iPhone X的UA
Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X)AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C153

这里就不一一列举了

适配工作

适配情况主要分为以下几种

顶部导航栏适配

其实这种情况的话并不需要我们做太多工作,safari在顶部已经帮我们做好了,如果是微信、QQ等这些内置的浏览器,应用本身也已经帮我们做好了适配工作,这种情况我们不再多讲

底部导航栏适配

这种是需要重点关注的适配情况,因为手机端safari有个很复杂的情况,上滑之后底部safari自带的导航栏会消失,而网页内容会延伸到屏幕底部,这样我们本身的导航栏会被下方的白线挡到,如下图所示

这里写图片描述

这种适配主要是通过iOS 11的系统支持的meta属性和css计算属性来实现。

iOS 11中在viewportmeta标签中添加了一个viewport=cover,其实这个属性以前就存在,取值默认为auto,也就是containcontaincover的区别在于下图

这里写图片描述

如果将viewport设置成cover,那么网页内容会占满整个屏幕

<meta name="viewport" content="width=device-width, minimum-scale=1, user-scalable=0, viewport-fit=cover">

这样网页内容是占满整个屏幕了,但是还有一个问题没有解决,底部导航栏如何不被导航条遮挡。这个时候就需要另外一个计算属性constant/env来解决了

iPhone X上提供了一个变量叫做safe-area-inset-*(*为top、bottom、left、right之一),这个属性可以描述网页内容距离安全区边缘的距离,如下图所示

这里写图片描述

在底部固定的tab中,只需要将这个tab容器的padding-bottom设置为safe-area-inset-bottom即可(别忘了考虑tab容器的盒子模型和高度)

// 以下两个属性位置不可以变,向后兼容
.tab-container{
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);
}

这样如果在移动端Safari中向上滑动的时候tab容器的高度会被safe-area-inset-bottom撑高,从而解决适配问题,就像下图这样

这里写图片描述

当然这个解决办法并不唯一,比如还可以通过设置一个单独的盒子,通过将其高度设置为safe-area-inset-bottom,这样也可以解决

结语

其实网页端iPhone X的适配工作并不繁杂,系统本身已经给我们提供了很好的解决方案。

如果大家有更好的想法,欢迎在评论区分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值