前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >h5页面适配iPhone X的方法

h5页面适配iPhone X的方法

作者头像
honey缘木鱼
发布2018-12-28 13:36:29
1.7K0
发布2018-12-28 13:36:29
举报
文章被收录于专栏:娱乐心理测试娱乐心理测试

项目接近尾声,测试时突然想起还有iphoneX需要适配,虽然页面都是自适应,但是由于iPhone X的特殊性,还是需要特殊对待。因为这个h5项目嵌入在原生项目中,适配就会有有种方式:1.在原生中用原生的的方法适配 2.在前端页面中用h5的方式适配。

一.原生适配iphoneX

原生适配很简单,查看机型图:

image

只要用

代码语言:javascript
复制
#define KIsiPhoneX ([UIScreen mainScreen].bounds.size.height>800.0f

判断是iPhone X的机型时,就在控制器的顶端,和底部留出 44px和34px的距离,然后webView装在这个控制器内就OK!

优点:在原生中适配,h5页面不用更改任何一句代码。

缺点:1)意味着如右图某些通栏页面无法实现,

image

代码语言:javascript
复制
      2)顶部和底部显色固定,无法适应页面颜色,(王者荣耀用链接地址传递参数的形式在原生中完美适配,不太明白原理)

** 一.h5页面适配iphoneX**

** 1.viewport-fit适配方案**

PhoneX的适配,在iOS 11中采用了viewport-fit的meta标签作为适配方案;viewport-fit的默认值是auto。css 函数 env() 和 constant()这两个函数都是 webkit 中 css 函数,可以直接使用变量函数,只有在 webkit 内核下才支持

env 函数

必须在 ios >= 11.2 才支持

constant 函数

必须 ios < 11.2 支持

viewport-fit取值如下:

image

safe-area-inset-top :视口顶部到安全区域的距离(以CSS像素为单位),一般情况下是 0。

safe-area-inset-right :视口最右边到安全区域的距离(以CSS像素为单位),一般情况下是 0。

safe-area-inset-left :视口最左边到安全区域的距离(以CSS像素为单位)在刘海全屏的时候 top 为 88px

safe-area-inset-bottom :视口底部到安全区域的距离(以CSS像素为单位)刘海全屏的条件下是 34px

constant() 是CSS的函数,可以把以上几个距离转换成我们常用的属性值。

  1. 当我们设置viewport-fit:contain,也就是默认的时候时;设置safe-area-inset-left, safe-area-inset-right, safe-area-inset-top和 safe-area-inset-bottom等参数时不起作用的。

2).当设置viewport-fit:cover时,具体使用方法为

代码语言:javascript
复制
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">

image.gif

代码语言:javascript
复制
body {
  padding-top: constant(safe-area-inset-top); //为导航栏+状态栏的高度 88px
  padding-top: env(safe-area-inset-top); //为导航栏+状态栏的高度 88px
  padding-left: constant(safe-area-inset-left); //如果未竖屏时为0
  padding-left: env(safe-area-inset-left); //如果未竖屏时为0
  padding-right: constant(safe-area-inset-right); //如果未竖屏时为0
  padding-right: env(safe-area-inset-right); //如果未竖屏时为0
  padding-bottom: constant(safe-area-inset-bottom); //为底下圆弧的高度 34px
  padding-bottom: env(safe-area-inset-bottom); //为底下圆弧的高度 34px      
}

2.媒体查询

代码语言:javascript
复制
@media screen and (device-width:375px) and (device-height:812px){
//在这里做iPhone X的判断
 // #app {
    //margin-top: 88px;
  //}
}

3.@supports 隔离兼容模式

代码语言:javascript
复制
@supports (bottom: env(safe-area-inset-top)) or (bottom: env(safe-area-inset-top)) {
 /*在这里做iphoneX的判断*/
  /*#app {*/
    /*margin-top: 88px;*/
  /*}*/
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档