H5网页适配 iPhoneX,就是这么简单

  iPhoneX 取消了物理按键,改成底部小黑条,这一改动导致网页出现了比较尴尬的屏幕适配问题。对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可(即常见的吸底导航、返回顶部等各种相对底部 fixed 定位的元素)。笔者通过查阅了一些官方文档,以及结合实际项目中的一些处理经验,整理了一套简单的适配方案分享给大家,希望对大家有所帮助,

您可能感兴趣的相关文章
  • 网站开发中很有用的 jQuery 效果【附源码】
  • 分享35个让人惊讶的 CSS3 动画效果演示
  • 十分惊艳的8个 HTML5 & JavaScript 特效
  • Web 开发中很实用的10个效果【源码下载】
  • 12款经典的白富美型 jQuery 图片轮播插件

以下是处理前后效果图:

适配之前需要了解的几个新知识

安全区域

安全区域指的是一个可视窗口范围,处于安全区域的内容不受圆角(corners)、齐刘海(sensor housing)、小黑条(Home Indicator)影响,如下图蓝色区域:

也就是说,我们要做好适配,必须保证页面可视、可操作区域是在安全区域内。

更详细说明,参考文档:Human Interface Guidelines - iPhoneX

viewport-fit

iOS11 新增特性,苹果公司为了适配 iPhoneX 对现有 viewport meta 标签的一个扩展,用于设置网页在可视窗口的布局方式,可设置三个值:

  • contain: 可视窗口完全包含网页内容(左图)
  • cover:网页内容完全覆盖可视窗口(右图)
  • auto:默认值,跟 contain 表现一致

注意:网页默认不添加扩展的表现是 viewport-fit=contain,需要适配 iPhoneX 必须设置 viewport-fit=cover,这是适配的关键步骤。

更详细说明,参考文档:viewport-fit-descriptor

constant 函数

iOS11 新增特性,Webkit 的一个 CSS 函数,用于设定安全区域与边界的距离,有四个预定义的变量:

  • safe-area-inset-left:安全区域距离左边边界距离
  • safe-area-inset-right:安全区域距离右边边界距离
  • safe-area-inset-top:安全区域距离顶部边界距离
  • safe-area-inset-bottom:安全区域距离底部边界距离

这里我们只需要关注 safe-area-inset-bottom 这个变量,因为它对应的就是小黑条的高度(横竖屏时值不一样)。

注意:当 viewport-fit=contain 时 constant 函数是不起作用的,必须要配合 viewport-fit=cover 使用。对于不支持 constant 的浏览器,浏览器将会忽略它。
官方文档中提到 env 函数即将要替换 constant 函数,笔者测试过暂时还不可用。

更详细说明,参考文档:Designing Websites for iPhone X

如何适配

了解了以上所说的几个知识点,接下来我们适配的思路就很清晰了。

第一步:设置网页在可视窗口的布局方式

新增 viweport-fit 属性,使得页面内容完全覆盖整个窗口:

1
<meta name="viewport" content="width=device-width, viewport-fit=cover">

 

前面也有提到过,只有设置了 viewport-fit=cover,才能使用 constant 函数。

第二步:页面主体内容限定在安全区域内

这一步根据实际页面场景选择,如果不设置这个值,可能存在小黑条遮挡页面最底部内容的情况。

1
2
3
body {
padding-bottom: constant(safe-area-inset-bottom);
}

 

第三步:fixed 元素的适配

类型一:fixed 完全吸底元素(bottom = 0),比如下图这两种情况:

可以通过加内边距 padding 扩展高度:

1
2
3
{
padding-bottom: constant(safe-area-inset-bottom);
}

 

或者通过计算函数 calc 覆盖原来高度:

1
2
3
{
height: calc(60px(假设值) + constant(safe-area-inset-bottom));
}

 

注意,这个方案需要吸底条必须是有背景色的,因为扩展的部分背景是跟随外容器的,否则出现镂空情况。

还有一种方案就是,可以通过新增一个新的元素(空的颜色块,主要用于小黑条高度的占位),然后吸底元素可以不改变高度只需要调整位置,像这样:

1
2
3
{
margin-bottom: constant(safe-area-inset-bottom);
}

空的颜色块:

1
2
3
4
5
6
7
{
position: fixed;
bottom: 0;
width: 100%;
height: constant(safe-area-inset-bottom);
background-color: #fff;
}

 

类型二:fixed 非完全吸底元素(bottom ≠ 0),比如 “返回顶部”、“侧边广告” 等

像这种只是位置需要对应向上调整,可以仅通过外边距 margin 来处理:

1
2
3
{
margin-bottom: constant(safe-area-inset-bottom);
}

 

或者,你也可以通过计算函数 calc 覆盖原来 bottom 值:

1
2
3
{
bottom: calc(50px(假设值) + constant(safe-area-inset-bottom));
}

 

别忘了使用 @supports

写到这里,我们常见的两种类型的 fixed 元素适配方案已经了解了吧,但别忘了,一般我们只希望 iPhoneX 才需要新增适配样式,我们可以配合 @supports 这样编写样式:

1
2
3
4
5
@supports (bottom: constant(safe-area-inset-bottom)) {
div {
margin-bottom: constant(safe-area-inset-bottom);
}
}

 

写在最后

以上几种方案仅供参考,笔者认为,现阶段适配处理起来是有点折腾,但是至少能解决,具体需要根据页面实际场景,在不影响用户体验与操作的大前提下不断尝试与探索,才能更完美的适配。

 

您可能感兴趣的相关文章
  • 精心挑选的美轮美奂的 jQuery 图片特效插件
  • 精心挑选的优秀jQuery Ajax分页插件和教程
  • 精心挑选的优秀 jQuery 文本特效插件和教程
  • 8款非常棒的响应式 jQuery 幻灯片插件推荐
  • 精心挑选12款优秀 jQuery 手风琴插件和教程

 

原文来自: 想要让H5网页适配 iPhoneX,就是这么简单

编译来源:梦想天空 ◆ 关注前端开发技术 ◆ 分享网页设计资源

转载于:https://www.cnblogs.com/lhb25/p/h5-web-app-adapt-to-iphonex.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python为什么closed_为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed])...

为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed])我遇到了两次调用的python类函数的问题。 我正在使用Spyder IDE。这是我的简单代码class Test:def f(self):print("a")from Test import *t Test()t.f()当我按“运行…

php关联数组和哈希表,php遍历哈希表及关联数组的实例代码

有关php数组的分类&#xff0c;PHP数组分为&#xff1a;数字索引数组和关联数组。其中数字索引数组和C语言中的数组一样&#xff0c;下标是为0&#xff0c;1&#xff0c;2…而关联数组下标可能是任意类型&#xff0c;与其它语言中的hash&#xff0c;map等结构相似。PHP遍历关联…

数字校园-云资源平台 2014.10.26-人人通共享空间

近期,教育部在统计学校信息化建设情况,当中一项重要内容,作为三通两平台的一个环节,就是学校开通人人通空间的情况,网上普及了一下知识,不就是十多年前就玩的学校博客的变种吗,网上有一些产品,也是没有热闹起来,为要求而要求的多,既然要求,就来一个吧,花了几天时间,也做了一个.…

VUE.js 中取得后台原生HTML字符串 原样显示问题

今天使用vue调试页面&#xff0c;发现了页面上的一个问题&#xff0c;后台数据传过来的HTML字符串并没有被转换为正常的HTML代码&#xff0c;一拍脑门&#xff0c;发现忘记转换了&#xff0c;于是满心欢喜加上了{{{}}}。但是之后构建发现报错&#xff1a; 为此去官网上查了下…

高性能持久消息

总览 尽管有许多可用于Java的高性能消息传递系统&#xff0c;但大多数都避免引用基准&#xff0c;包括持久消息传递和消息的序列化/反序列化。 这样做有很多原因。 1&#xff09;您并不总是需要或想要持久消息2&#xff09;您希望使用自己的序列化选项。 避免使用它们的一个重要…

python去掉重复内容并按原来次序输出元素_在Python中,从列表中删除重复项以使所有元素在保留顺序时都是唯一的最快的算法是什么?...

饮歌长啸使用方法&#xff1a;lst [8, 8, 9, 9, 7, 15, 15, 2, 20, 13, 2, 24, 6, 11, 7, 12, 4, 10, 18, 13, 23, 11, 3, 11, 12, 10, 4, 5, 4, 22, 6, 3, 19, 14, 21, 11, 1, 5, 14, 8, 0, 1, 16, 5, 10, 13, 17, 1, 16, 17, 12, 6, 10, 0, 3, 9, 9, 3, 7, 7, 6, 6, 7, 5, 1…

Lucene –快速添加索引和搜索功能

什么是Lucene&#xff1f; Apache LuceneTM是完全用Java编写的高性能&#xff0c;功能齐全的文本搜索引擎库。 它是一项适用于几乎所有需要全文搜索的应用程序的技术&#xff0c;尤其是跨平台的应用程序。 Lucene可以纯文本&#xff0c;整数&#xff0c;索引PDF&#xff0c;Of…

td 双击 编辑 php,双击表格td进行编辑

$(function(){//隔行换色// $("tbody tr:odd").css("background-color","#eee");var numId $(".tbody td");numId.dblclick(function(){var tdIns $(this);var tdpar $(this).parents("tr");//tdpar.remove();//current_…

前端开发之基础知识-HTML(一)

1.1 html概述和基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写&#xff0c;意思是超文本标记语言&#xff0c;超文本指的是超链接&#xff0c;标记指的是标签&#xff0c;是一种用来制作网页的语言&#xff0c;这种语言由一个个的标签组成&#xff0c;用…

nodejs的async异步编程

函数有&#xff1a; series waterfall parallel parallelLimit … series函数 串行执行 它的作用就是按照顺序一次执行。 async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { conso…

《深入理解Java虚拟机》读书笔记3--垃圾回收算法

转载&#xff1a;http://blog.csdn.net/tjiyu/article/details/53983064 下面先来了解Java虚拟机垃圾回收的几种常见算法&#xff1a;标记-清除算法、复制算法、标记-整理算法、分代收集算法、火车算法&#xff0c;介绍它们的算法思路&#xff0c;有什么优点和缺点&#xff0c;…

python常用函数中文_【python】python常用函数

urlencode与urldecode当url中包含中文或者参数包含中文&#xff0c;需要对中文或者特殊字符(/、&)做编码转换。urlencode的本质&#xff1a;把字符串转为gbk编码&#xff0c;再把\x替换成%。如果终端是utf8编码的&#xff0c;需要把结果再转成utf8输出&#xff0c;否则会乱…

带有批注的Spring硒测试

这篇文章描述了如何在Java中实现Selenium测试。 它的灵感来自Alex Collins的帖子&#xff0c;并带有注释。 该代码可在GitHub的Spring-Selenium-Test目录中找到。 一些替代方法和更轻巧的技术可用于对Spring MVC应用程序进行单元测试。 要进行单元测试服务&#xff0c;请参见此…

sizeof运算符

sizeof是一个单目运算符&#xff0c;它的运算对象是变量或数据类型&#xff0c;运算结果为一个整数。运算的一般形式如下: sizeof(<类型或变量名>) 它只针对数据类型&#xff0c;而不针对变量&#xff01; 若运算对象为变量&#xff0c;则所求的结果是这个变量占用的内存…

oracle 日志切换太频繁,诊断一次Oracle日志切换频繁的问题

日志切换&#xff0c;就是生成的日志太大&#xff0c;数据块的变化太频繁。Snap IdSnap TimeSessionsCursors/SessionBegin Snap:1456009-Dec-15 04:00:48594.5End Snap:1456109-Dec-15 05:00:59544.6Elapsed:60.19 (mins)DB Time:82.47 (mins)1s产生2M的日志。Per SecondPer T…

Flex布局(一)flex-direction

采用Flex布局的元素&#xff0c;被称为Flex容器(flex container)&#xff0c;简称"容器"。其所有子元素自动成为容器成员&#xff0c;成为Flex项目(Flex item)&#xff0c;简称"项目" Flex-direction调整主轴方向&#xff08;默认为水平方向&#xff09;包…

【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】...

原文地址&#xff1a;http://www.yxxrui.cn/article/179.shtml 未经许可请勿转载&#xff0c;如有疑问&#xff0c;请联系作者&#xff1a;yxxrui163.com 我遇到的问题&#xff1a;公司的网络没有固定的公网IP地址&#xff0c;但是需要能够保证的是&#xff0c;每次动态分配的I…

Java管理扩展

什么是JMX&#xff1f; Java管理扩展&#xff08;JMX&#xff09;是一种API&#xff0c;用于管理或监视各种资源&#xff0c;例如应用程序&#xff0c;设备&#xff0c;服务&#xff0c;当然还有JVM。 通过Java社区流程&#xff08;JCP&#xff09;开发&#xff0c;JMX技术被构…

登录网页后要弹出一个新标签_连永久链接都不会,还做什么新媒体?

上次给主编大大发的预览链接失效了&#xff0c;被骂得狗血淋头。大部分运营人可能都遇到过这种情况&#xff0c;忽视了预览生成的链接只是临时的&#xff0c;在12小时后或超过500阅读量后就会失效。一个疏忽&#xff0c;给自己带来了不必要的麻烦&#xff0c;耽误工作&#xff…

混频通信的matlab仿真,基于MATLAB的扩频通信系统仿真研究—上海交通大学

基于MATLAB 的扩频通信系统仿真研究范伟 翟传润 战兴群(上海交通大学电子信息与电气工程学院&#xff0c;200030&#xff0c;上海)摘要 本文阐述了扩展频谱通信技术的理论基础和实现方法&#xff0c;利用MATLAB 提供的可视化工具Simulink 建立了扩频通信系统仿真模型&#xff0…