位置: IT常识 - 正文

h5适配ios顶部和底部安全区域的问题(h5适配iphonex)

编辑:rootadmin
h5适配ios顶部和底部安全区域的问题 一. 前言:

推荐整理分享h5适配ios顶部和底部安全区域的问题(h5适配iphonex),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:h5手机端适配,h5适配各种屏幕的方法,h5在安卓和ios的兼容,h5在安卓和ios的兼容,h5的适配,h5适配各种屏幕的方法,h5适配rem,h5适配iphonex,内容如对您有帮助,希望把文章链接给更多的朋友!

苹果手机从iphoneX之后,屏幕顶部都有一个齐刘海,iPhoneX 取消了物理按键,改成底部小黑条,如果不做适配,这些地方就会被遮挡,所以本文记录一下齐刘海与底部小黑条的适配方法。

二. 知识点学习

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

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

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

h5适配ios顶部和底部安全区域的问题(h5适配iphonex)

2)env() 和 constant() iOS11 新增特性,Webkit 的一个 CSS 函数,用于设定安全区域与边界的距离,有四个预定义的变量(单位是px):如果是微信小程序的话,viewport-fit默认是 cover

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

注意: 1)当 viewport-fit = contain 时 env() 是不起作用的,必须要配合 viewport-fit = cover 使用。对于不支持env() 的浏览器,浏览器将会忽略它。 需要做向后兼容。 2)env() 跟 constant() 需要同时存在,而且顺序不能换。

//适配底部小黑条.page_bottom { padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS<11.2 */ padding-bottom: env(safe-area-inset-bottom); /* 兼容iOS>= 11.2 */ }三. 适配步骤?1)设置网页在可视窗口的布局方式<meta name='viewport' content="width=device-width, viewport-fit=cover" />2)适配导航栏刘海屏

用的是vant的导航栏组件自带的 safe-area-inset-top 属性,因为van-nav-bar导航栏开启了fixed布局,导致页面下面的所有内容,直接上升到了页面的最顶部,部分内容会被van-nav-bar导航栏遮挡,我没用这个组件自带的placeholder占位,而是在外面又增加了一个class类名为navBarCon的div,给他一个和导航栏一样的高度,设置了 height:50px; 这样就会占位了

//适配导航栏刘海屏,用的是vant的导航栏组件,自带的 safe-area-inset-top 属性<template> <div class="root"> <div class="navBarCon"> <van-nav-bar title="收货地址" left-arrow fixed safe-area-inset-top @click-left="navBack" /> </div> </div></template><script>export default { data () { return {} }, mounted () {}}</script><style lang="scss" scoped>::v-deep { .van-nav-bar .van-icon { color: #333 !important; font-weight: 600; font-size: 20px; } .van-nav-bar__title { color: #333; font-weight: 600; } .van-nav-bar__content { height: 50px; }}.root { height: 100vh; .navBarCon { height: 50px; }}</style>

对于安卓机这里会有个问题,会没有状态栏的一个区域,就是wifi,时间那一栏 (这是个困扰了一段时间的问题),今天解决了来记录下

大体思路: 判断手机系统是否是Andriod,是的话增加一个padding-top的样式作为安卓的头部距离;ios的话还是让他自己适配

// 判断手机系统export const getNavigatorType = () => { let temp = '' var u = navigator.userAgent if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { temp = 'Android' } else { temp = 'ios' } return temp}<script>import { getNavigatorType } from '@/utils/tool.js' mounted () { let navigatorType = getNavigatorType() if (navigatorType === 'Android') { // 获取文档中的第一个class="van-nav-bar"的元素 document.querySelector('.van-nav-bar').style.paddingTop = '20px' } },</script>3)适配底部小黑条 fixed 元素的适配

吸底的情况(bottom=0)

<template> <div class="root"> <div class="page_bottom flexAround"> <div class="amount"> <span>合计:</span> <span class="red">¥</span> <span class="total_money red">{{ total_money }}</span> </div> <div class="payBtn" @click="confirmOrder">提交订单</div> </div> </div></template><script>export default { data () { return {} }, mounted () {}}</script><style lang="scss" scoped>/* 这个方案需要吸底条必须是有背景色的,因为扩展的部分背景是跟随外容器的,否则出现镂空情况。*/.page_bottom { position: fixed; left: 0; right: 0; bottom: 0; height: 45px; /*暂时发现安卓小屏手机安全区为0 && 不带单位的话padding-bottom会失效,写一个兜底, 并写在最上面;f12发现css样式如果都给height设置样式,会依次往下,用最底下的一个样式,如果最下面的没失效,依次往上查找,所以兜底的写在最上面 */ height: calc(45px + constant(safe-area-inset-bottom)); /* 直接扩展高度,因为padding-bottom是内边距 */ height: calc(45px + env(safe-area-inset-bottom)); /* 直接扩展高度 */ background: #fff; padding: 0 11px 0 20px; box-sizing: border-box; padding-bottom: constant(safe-area-inset-bottom); /*兼容 iOS<11.2 */ padding-bottom: env(safe-area-inset-bottom); /* 兼容iOS>= 11.2*/}.flexAround { display: flex; justify-content: space-between; align-items: center;}</style>四:结语

为了方便维护使用,可以把顶部导航栏封装成一个子组件,在父组件中调用

推荐 fixed元素的适配 bottom=0和非0的情况 适配底部小黑条 yidongduanh5安全区适配 如何解决移动端的安全区域为0的问题

本文链接地址:https://www.jiuchutong.com/zhishi/283993.html 转载请保留说明!

上一篇:【环境搭建】使用nvm下载node后npm不能使用(hue环境搭建)

下一篇:凤凰城天港国际机场鸟瞰图,亚利桑那 (© Nearmap/Getty Images)(港田路凤凰城)

  • 笔记本电脑开wifi共享(笔记本电脑开wifi)(笔记本电脑开wifi的快捷键)

    笔记本电脑开wifi共享(笔记本电脑开wifi)(笔记本电脑开wifi的快捷键)

  • 支付宝刷脸登录、刷脸支付功能怎么设置(支付宝刷脸登录用视频刷脸可以不)

    支付宝刷脸登录、刷脸支付功能怎么设置(支付宝刷脸登录用视频刷脸可以不)

  • 华为手机怎么设置更省电(华为手机怎么设置24小时时间显示)

    华为手机怎么设置更省电(华为手机怎么设置24小时时间显示)

  • 微信朋友圈多少字不会被折叠(微信朋友圈多少行会被折叠)

    微信朋友圈多少字不会被折叠(微信朋友圈多少行会被折叠)

  • 华为荣耀play3的语音助手唤醒方法是什么(华为荣耀play3的语音助手叫什么)

    华为荣耀play3的语音助手唤醒方法是什么(华为荣耀play3的语音助手叫什么)

  • 华为p40的智能遥控在哪(华为p40的智能遥控不见了)

    华为p40的智能遥控在哪(华为p40的智能遥控不见了)

  • 户户通移动位置怎么办(户户通移动位置后怎么搜索不到频道了)

    户户通移动位置怎么办(户户通移动位置后怎么搜索不到频道了)

  • plog是什么(plog是什么的缩写)

    plog是什么(plog是什么的缩写)

  • 华为mate30pro怎么重启手机(华为mate30pro怎么刷机)

    华为mate30pro怎么重启手机(华为mate30pro怎么刷机)

  • 华为ebg-an00是什么型号(华为ebganoo是什么型号)

    华为ebg-an00是什么型号(华为ebganoo是什么型号)

  • 水星管理员密码是多少(水星管理员密码不对怎么办)

    水星管理员密码是多少(水星管理员密码不对怎么办)

  • 小红书号是什么(小红书号是什么平台)

    小红书号是什么(小红书号是什么平台)

  • 华为nova7se防水等级(华为nova7se防水性)

    华为nova7se防水等级(华为nova7se防水性)

  • psd格式是什么意思(psd格式有什么用)

    psd格式是什么意思(psd格式有什么用)

  • 抖音号多久可以改一次(抖音号多久可以注销成功)

    抖音号多久可以改一次(抖音号多久可以注销成功)

  • 苹果电脑终端在哪(苹果电脑的终端怎么用)

    苹果电脑终端在哪(苹果电脑的终端怎么用)

  • 奇异果视频是爱奇艺吗(奇异果视频官网)

    奇异果视频是爱奇艺吗(奇异果视频官网)

  • 快手怎么暂停视频播放(快手怎么暂停视频)

    快手怎么暂停视频播放(快手怎么暂停视频)

  • 华为dub-al20是什么型号(华为dubal20是什么型号手机)

    华为dub-al20是什么型号(华为dubal20是什么型号手机)

  • realtekpxeb02d00啥子意思

    realtekpxeb02d00啥子意思

  • 有什么好玩的网页游戏?(有什么好玩的网页游戏推荐)

    有什么好玩的网页游戏?(有什么好玩的网页游戏推荐)

  • 短信怎么退出亲情服务(短信如何退出亲情号)

    短信怎么退出亲情服务(短信如何退出亲情号)

  • 小米回收站恢复的照片在哪(小米回收站恢复的照片文件已损坏)

    小米回收站恢复的照片在哪(小米回收站恢复的照片文件已损坏)

  • BasicSR的使用过程(basic run)

    BasicSR的使用过程(basic run)

  • 落基山国家公园的朗斯峰,科罗拉多州 (© Andrew R. Slaton/Tandem Stills + Motion)(落基山国家公园攻略)

    落基山国家公园的朗斯峰,科罗拉多州 (© Andrew R. Slaton/Tandem Stills + Motion)(落基山国家公园攻略)

  • 个人所得税可以退吗
  • 印花税的缴纳方法包括哪几种
  • 小规模纳税人缴纳增值税怎么算
  • 无合同销售收入怎么算
  • 火车票全额抵减增值税可以吗
  • 1号没有抄税可以补税吗
  • 小规模企业收入怎么做账
  • 直接抵免和间接抵免的区别
  • 预收和应收可以冲销吗
  • 建设用地规划许可证和建设工程规划许可证的区别
  • 白酒销售环节交消费税吗
  • 权益性投资收益的账务处理
  • 商业企业库存商品和销售对不上
  • 集体土地上的不动产证已经能查询为何房产证拿不到
  • 卖桶装水税率
  • 进项税和销项税税率一样吗
  • 统一信用社会代码怎么填
  • 合理损耗算入账价值吗
  • 股权转让的标的
  • 资产转让税费哪方承担
  • 免税单位无租使用纳税单位土地
  • 电子承兑转让怎么撤销
  • 采用视同买断方式代销商品怎么记账?
  • 担保贷款造成的损失可以税前扣除吗?
  • 单位社保部分会扣吗
  • 计提长期债券利息分录
  • tp-link无线路由器怎么样
  • PHP:oci_pconnect()的用法_Oracle函数
  • php讲解
  • yii框架教程
  • 如何处理库存差异问题
  • mysql输入中文显示乱码
  • 右键菜单里的快捷键
  • win10系统多任务功能的快捷键
  • win11 build 22000.65
  • php图片链接
  • 政策性搬迁条件
  • 错账是什么
  • 最贵的节能灯泡品牌
  • 融资租赁增值税税目
  • 小规模纳税人减免增值税会计处理
  • php弹出登录框
  • zend framework手册
  • 存货非正常损失可以所得税前扣除吗
  • 营业外支出科目代码
  • 帝国cms8.0
  • 卷票要盖发票专用章吗?
  • 公允价值变动损益借贷方向增减
  • sql翻译
  • 固定资产一次性扣除账务处理
  • 利润表中其他业务利润怎么算
  • 补充医疗险要放多少钱
  • 背书的银行承兑汇票怎么做账
  • 发票普通发票
  • 支付保证金如何做账务处理
  • 收到政府土地补偿款账务处理
  • 印花税减免额不能为零怎么填
  • 个体工商户和小规模纳税人的区别
  • 房地产企业收到政府补助
  • sql注入是干嘛的
  • sql怎么遍历
  • sql server中replace()函数用法解析
  • win10电脑系统配置
  • win10的打开方式
  • Win10系统如何开启全部权限
  • xp从装系统
  • ubuntu系统服务器
  • alp是什么文件
  • hottray.exe是什么进程 有什么作用 hottray进程查询
  • linux内核2.3.20
  • win7系统账户名怎么看
  • win8系统怎么样好用吗
  • win7系统重启后黑屏不进系统
  • python的类变量和成员变量
  • unity cpu优化
  • u3d脚本语言
  • 安卓app性能测试
  • 江西2022年选调
  • 福建省农业厅副厅长梁
  • 如何打印个人所得税明细
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设