小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
开头
从苹果手机 iphoneX
发布之后,前端人员在开发移动端Web页面时,得多注意一个对 IOS
所谓安全区域范围的适配。这其实说白了就是 iphoneX
之后的苹果手机,在页面上,你需要对顶部和底部多预留一点空间。
造成这个问题的主要原因就是苹果手机在屏幕上出现了所谓的刘海屏,而且更是在屏幕下方加了一条小黑条。
如图:
我们上下预留的占位空间就是为了防止我们页面的内容被这些元素遮挡,但是如果你做的页面只是放在一些浏览器(微信内置浏览器)内传播,一般我们也不需要处理顶部刘海问题,顶部一般就是原生的标题栏了,不用我们管。但如果你的页面会被内嵌在 APP
展示且 APP
是全屏展示的,那么这个问题还是得处理一下。
下面我们分别介绍一下通过 CSS
和 JS
怎么去处理,根据场景你可以自行选择。
CSS
在 iOS11
新增特性中,Webkit
包含了两个新的函数 env()
和 constant()
,以及四个预定义的常量:
safe-area-inset-top
:安全区域距离顶部边界距离,状态栏+导航栏大约为88px。safe-area-inset-left
:安全区域距离左边边界距离,竖屏时为0。safe-area-inset-right
:安全区域距离右边边界距离,竖屏时为0。safe-area-inset-bottom
:安全区域距离底部边界距离,大约高度为34px。
我们可以这样子使用它们:
body{
/* 兼容 iOS < 11.2 */
padding-top: constant(safe-area-inset-top);
padding-left: constant(safe-area-inset-left);
padding-right: constant(safe-area-inset-right);
padding-bottom: constant(safe-area-inset-bottom);
/* 兼容 iOS >= 11.2 */
padding-top: env(safe-area-inset-top);
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
padding-bottom: env(safe-area-inset-bottom);
}
复制代码
当然,你也可以在某个固定(fixed)在底部的元素上单独使用:
div{
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
复制代码
JS
当然,有时候单纯的 CSS
方式并不能满足实际的需求场景,那么我们就需要判断出那些 IOS
的手机屏幕是需要特殊处理的。
而 iphoneX
之后的苹果手机 Series
参数如下:
机型 | 倍率 | 分辨率 | pt |
---|---|---|---|
iPhone X | 3 | 2436 × 1125 | 812 × 375 |
iPhone XS | 3 | 2436 × 1125 | 812 × 375 |
iPhone XS Max | 3 | 2688 × 1242 | 896 × 414 |
iPhone XR | 2 | 1792 × 828 | 896 × 414 |
根据这些参数我们把苹果手机的长屏,也就是拿屏幕的高度用来当成判断条件:
/**
* 判断IOS异形屏
* @returns
*/
export function isIphoneX(){
if (typeof window !== 'undefined' && window) {
var faultTolerantVal = 10; // 容错值
return /iphone/gi.test(window.navigator.userAgent) && (window.screen.height + faultTolerantVal) >= 812;
}
return false;
};
复制代码
至此,本篇文章就写完啦,撒花撒花。
希望本文对你有所帮助,如有任何疑问,期待你的留言哦。
老样子,点赞+评论=你会了,收藏=你精通了。