iPhone X网页适配问题_jsonya的博客-程序员秘密

技术标签: iphone x  html5  移动端  x  iphone  

北京时间9月12日,苹果在乔布斯剧院发布了iPhone X。iphoneX正面的全面屏上方有一条刘海,对于如何适配iphoneX,苹果Human Interface Guidelines文档已给出详细的说明。

苹果对于iphoneX的设计布局意见如下:


核心内容应该处于Safe area 确保不会被设备圆角(corners)。传感器外壳(sense哦 housing,机刘海)以及底部的home indicator遮挡。

本文将婆媳两则在iPhone X异性屏和iOS11网页适配中遇到的问题及解决方案。


iPhone X Safari横屏显示左右白边问题

iPhone X Safari在横屏状态下,网页左右两侧可能会出现白边,如下:

因为iPhone X会将网页内容显示在Safe area 导致的,解决这一问题,我们需要将背景颜色填充整个屏幕区域,而网页内容处于Sage area。


解决方案一:background-color:

如果网页设置了一个背景颜色,那么最简单解决方案是,在body节点设置background-color,是背景颜色填充整个屏幕,从而解决横屏显示左右白边的问题。


解决方案二:viewport-fit +safe-area-inser-*

在iOS11中苹果为web新增两个内容 viewport-fit+safe-area-inser-*

    注意:viewport-fit和safe-area-inset-*只对于WKWebView有效,在UIWebView中无效。


viewport-fit用于设置网页在可视窗口的布局方式

  文档:CSS Round Display Spec


这个属性可以设置为:

  contain:The viewport  should fully contain the web content .可视窗口完全包含网页内容

cover:The web content should fully cover the viewport 网页内容完全覆盖可视窗口

auto:The default value,contain

对于iPhone X之前的iphone设备屏幕为规则的矩形,网页内容都可以完整展示;但对于iPhone X是异性屏幕,通过viewport-fit可以设置网页内容在可视窗口中显示规则,通过下图可以辅助理解


我们知道默认情况下Viewport-fit=auto即为viewport-fit=contain,在iPhone X中,相当于网页内容展示在Safe area,这样也就是横屏显示时出现白边的原因了,所以我们可以设置viewport-fit=cover即可解决问题

<meta name="viewport" content="width=device-width,initial-scale=1.0,viewport-fit=cover">

注意到应用viewport-fit:cover之后,网页右上角,menu按键和in按键被圆角,传感器外壳(齐刘海)剪裁掉了


safe-area-inser-*

在设置viewport-fit:cover之后,web中会新增四个常亮:

   safe-area-inset-top

  sage-area-inser-right

  safe-area-inset-left

  safe-area-inset-bottom

分别表示Safe area和可视窗口viewport顶部,右边,左边,底部的间距,可以用于设置margin,padding,或者绝对定位时left,top

   注意:在横屏和竖屏状态下,safe-area-inset-*的值不同


为了解决应用viewport-fit=cover之后,有些显示内容被裁剪的问题,我们可以通过添加边距使得网页主要内容处于safe area中不被剪裁,解决方式如下:


padding:constant(safe-area-inset-top)constant(safe-area-inset-right)constant(safe-area-insert-bottom) constant(safe-area-inset-left);




iOS 11 WebView中状态栏的问题

在iOS 11 由于safe area,状态栏的表现有点不同。如果页面顶部有一个header bar,设置position:flxed:top:0px;那么在页面滚动的过程中,会出现如下问题::

banner bar 没有固定在最底部,上下滚动的过程中,我们可以看到网页内容从status bar下方穿过


问题重现:

创建一个iOS项目,视图中添加一个WKWebView,,加载百度首页

(void)viewDidLoad{

[super viewDidLoad];

WKWebView  *webView=[[WKWebView  alloc ] initWithFrame:self.view.bounds];

[webView loadRequest:[NSURLRequest requestWithUrl:[NSURL URLWithString:@"http://www.baidu.com]]];

[selft.view addSubview:webView];

}


剖析问题:

1、这个问题同样也是由于safe area 导致,虽然headerba位置信息为position:fixed;top:0px;但这个位置也是相对于safe area而言的,所以看到header bar并没有唯一屏幕最顶部,在viewport meta标签,添加viewport-fit=cover即可解决问题

虽然header bar固定在屏幕最上方,但是很明显在iPhone X中却被圆角和齐刘海才见了内容,这怎么办呢,为header bar添加padding-top即可解决此问题

header {
 /* ... */
 /* Status bar height on iOS 10 */
 padding-top: 20px;
 /* Status bar height on iOS 11+ */
 padding-top: constant(safe-area-inset-top);
}



参考链接

Human Interface Guidelines-iphone X

Removing the White bars in Safari on iphone X

Understanding the WebView Viewport in IOS 11


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jsonya/article/details/78201130

智能推荐

速卖通新版物流模板和旧物流模板的区别_张艺兴的小宝贝的博客-程序员秘密

速卖通新版物流模板和旧物流模板的区别速卖通新版物流模板主要改进有一下几点:可以搜索物流模板、批量选择目的地、物流模板关联的商品数量、页面展示更加清楚。在速卖通,如果你是中国跨境商家,物流模板只能发货到国外,如果是海外本地商家即账号是海外本地的物流模板可以发货到本地或全球。在买家后台-商品-物流模板,点击新建运费模板就可以重新建立一个运费模板。新的运费模板新增了搜索功能,对于多运费模板的商...

九度教程--------11_z_x_b5的博客-程序员秘密

九度教程第十一题#include #define OFFSET 500000int Hash[1000001];int main(){ int n, m; while(~scanf("%d %d",&n,&m)) { for(int i = -500000;i <= 500000;i ++) { Hash[i + OFFSET] = 0; } //初始化将每个

ubuntu16.04(ros版本kinetic)维基百科20例操作示例_weixin_30867015的博客-程序员秘密

首先,给出示例的网址http://wiki.ros.org/ROS/Tutorials(本身有例程,不过部分有问题或者不够详尽)本例的工作空间是在个人目录中的workspace文件夹表示为~/workspace或者/home/(你的用户名)/workspace1、配置环境,创建程序包,编译程序包;$ source /opt/ros/kinetic/setup.bash   ...

用Python制作动态二维码,一行代码就做到了_千锋python和唐唐的博客-程序员秘密

如何做到用一行代码实现动态二维码的制作?用法比较简单,直接通过pip安装即可pip3 install myqr安装完成之后,就可以生成你想要的二维码了。对!就是这么简单…普通的二维码直接执行下面代码即可# myqr 二维码内容&gt;myqr http://weixin.qq.com/r/khy5oY7EN9NIrcrC90mA会在当前目录生成相应的二维码图片,默认名字为 qr...

python3换行输出_python怎么输出换行_weixin_39775106的博客-程序员秘密

在我们常用的print()方法进行输出时,通常输出结果是整行显示出来的,这时候我们需要考虑一下,我们输出的结果需不需要换行?python学习网,大量的免费python视频教程,欢迎在线学习!不需要换行的方法也是嗯容易的的,这里就不多赘述了,来说说如何做到输出换行:常用的转义符方式:\n#-*-coding:utf-8-*-A="来看看能不能\n换行。"print(A)输出结果来看看能不能换行...

GIS设备gim模型要求_加载gim模型_设备GIM三维模型的博客-程序员秘密

三维模型需满足QGDW 11809-2018《输变电工程三维设计模型交互规范》、QGDW 11810.1-2018《输变电工程三维设计建模规范.第1部分:变电站(换流站)》、三维模型交深度的相关要求,三维模型应按比例(1:1)建模,电气设备模型格式采用*.GIM。三维模型需满足以下要求1)GIS本体可采用圆柱体(母线套管部分)与长方体(设备部分)的组合来表示。出线及进线套管可采用圆柱(锥)体表示。套管均压环可采用圆环表示。一次接线端子板采用端子板图元表示。接地端子板采用端子板图元表示。爬梯操作平台可

随便推点

省级面板数据(2000-2019)四:固定资产投资+房地产(stata版)_理想主义的百年孤独的博客-程序员秘密

省级面板数据(2000-2019)四:固定资产投资+房地产(stata版)下载链接:省级面板数据(2000-2019)四:固定资产+房地产一、全社会固定资产投资全社会固定资产投资(亿元)城镇固定资产投资(亿元)房地产开发投资(亿元)二、按登记注册类型分全社会固定资产投资内资企业全社会固定资产投资(亿元)国有全社会固定资产投资(亿元)集体全社会固定资产投资(亿元)股份合作全社会固定资产投资(亿元)港、澳、台商投资全社会固定资产投资(亿元)外商投资全社会固定资产投资(亿元)三、按资

[html5]触摸事件(touchstart、touchmove和touchend)_zccst的博客-程序员秘密

作者:zccst参考文章:[url]http://www.css119.com/archives/1629[/url]HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmo...

Emacs安装R开发环境ESS_emacs r语言_NewthingX的博客-程序员秘密

Emacs R在CentOS6.5上使用R语言,不能安装RStudio等图形化编辑工具,但Linux系统上都有功能相当强大Emasc,可以在Emacs中安装插件以支持R开发环境。下面是在CentOS6.5系统上,Emacs23.1.1中安装R开发环境ESS的过程。ESS:Emacs SpeaksStatistics (ESS) is an add-on package fo

GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名_yhcs1213的博客-程序员秘密

1. 为什么会出现undefined reference to 'xxxxx'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。2. -l参数和-L参数-l参数就是

windows远程桌面访问Linux系统 (XRDP+VNC )_lzg13541043726的博客-程序员秘密

1.安装XRDP使用rdp协议访问远程Linux桌面一般情况下,如果需要登陆远程Linux系统,我们会使用ssh/telnet来完成,如果需要登陆到远程Linux系统的桌面环境,我们可能会使用VNC。VNC是大部分Linux发行版默认的基于RFB协议的远程桌面程序,但对于普通用户来说,VNC的用户体验并不好,比较慢,还需要安装客户端。Windows的远程桌面基于RDP协议,

对Vue.js的认识及运用_谈谈你对 vue.js 的理解以及使用经验_木子李木的博客-程序员秘密

1.Vue.js是什么?Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。学习vue.js的优势在哪里?Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。它的目标是通过尽可...

推荐文章

热门文章

相关标签