位置: 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)(港田路凤凰城)

  • 企鹅影院和腾讯视频会员通用吗(企鹅影院和腾讯视频资源)

    企鹅影院和腾讯视频会员通用吗(企鹅影院和腾讯视频资源)

  • 快手怎么查看收入明细(快手怎么查看收藏我作品的人)

    快手怎么查看收入明细(快手怎么查看收藏我作品的人)

  • 荣耀20Pro怎么下载qq(荣耀20pro怎么下载歌曲到U盘)

    荣耀20Pro怎么下载qq(荣耀20pro怎么下载歌曲到U盘)

  • wifi密码被别人改了怎么办(WIFI密码被别人知道了怎么办)

    wifi密码被别人改了怎么办(WIFI密码被别人知道了怎么办)

  • 微信官方收款码的好处(微信官方收款码有什么好处)

    微信官方收款码的好处(微信官方收款码有什么好处)

  • iphone5s找不到录屏(iphone5s录屏怎么没有声音)

    iphone5s找不到录屏(iphone5s录屏怎么没有声音)

  • 输入验证码为什么老是说错误(输入验证码为什么没有反应)

    输入验证码为什么老是说错误(输入验证码为什么没有反应)

  • 华为手机充一夜电有损害吗(华为手机充一夜电无法开机)

    华为手机充一夜电有损害吗(华为手机充一夜电无法开机)

  • 苹果手机蓝牙自动打开是怎么回事(苹果手机蓝牙自动接听电话怎么关闭)

    苹果手机蓝牙自动打开是怎么回事(苹果手机蓝牙自动接听电话怎么关闭)

  • hd520相当于什么显卡(hd520相当于什么独显)

    hd520相当于什么显卡(hd520相当于什么独显)

  • 全频喇叭和同轴喇叭的区别(全频喇叭和同轴喇叭唱歌哪个好)

    全频喇叭和同轴喇叭的区别(全频喇叭和同轴喇叭唱歌哪个好)

  • 华为手环只能配华为手机吗(华为手环只支持华为手机吗)

    华为手环只能配华为手机吗(华为手环只支持华为手机吗)

  • 苹果8p128g什么时候出(苹果8p128g是什么时候出的)

    苹果8p128g什么时候出(苹果8p128g是什么时候出的)

  • 通常说的主机是(通常所说的主机指)

    通常说的主机是(通常所说的主机指)

  • 怎么给群里人头衔(怎么给群弄头像)

    怎么给群里人头衔(怎么给群弄头像)

  • vivo手机设置首选网络类型(vivo手机首页)

    vivo手机设置首选网络类型(vivo手机首页)

  • 打印证件照怎么排版(打印证件照怎么设置尺寸大小)

    打印证件照怎么排版(打印证件照怎么设置尺寸大小)

  • 手机qq小程序怎么关(手机qq小程序在哪儿)

    手机qq小程序怎么关(手机qq小程序在哪儿)

  • iphonex打电话怎么录音(iPhonex打电话怎么录音)

    iphonex打电话怎么录音(iPhonex打电话怎么录音)

  • 飞猪怎么购买飞机票(飞猪怎么订机票便宜)

    飞猪怎么购买飞机票(飞猪怎么订机票便宜)

  • 微信的交易记录删除后还能看到吗(微信的交易记录能彻底删除吗)

    微信的交易记录删除后还能看到吗(微信的交易记录能彻底删除吗)

  • 三星a70有nfc吗(三星a70nfc能加门禁卡吗)

    三星a70有nfc吗(三星a70nfc能加门禁卡吗)

  • a8 7500相当于i几(a8 7500相当于intel)

    a8 7500相当于i几(a8 7500相当于intel)

  • 如何在uniapp中优雅地使用WebView(uniapp如何使用)

    如何在uniapp中优雅地使用WebView(uniapp如何使用)

  • 什么负债计税基础为零
  • 小规模纳税人减征额怎么计算
  • 货品调拨的意义
  • 收到固定资产发票抵扣进项税
  • 小微企业条件2018
  • 快递费属于什么合同
  • 结转损益类费用科目的余额
  • 企业发生劳动仲裁还可以进行融资吗
  • 软件企业即征即退账务处理
  • 债务重组偿债顺序
  • 资产损失税前扣除管理办法2019
  • 刷信用卡付货款怎么操作
  • 个体工商户2020
  • 金税四期什么时候结束
  • 培训费增值税专用发票
  • 多交税款退税怎么做账
  • 电子税务局财报怎么报
  • 所得税纳税调增调减怎么理解
  • 广告业的其他应收款包括哪些?
  • 刚成立的工业企业如何具体设计和考虑成本项目处理?
  • 屏幕乱跳广告解决办法
  • 公司流水账是会计做吗
  • 收到个人款开公司发票
  • 如何设定电脑开机密码锁
  • 扣客户的罚款会计科目
  • 上一年度的费用入账需要分摊吗
  • 跨年的定额发票可以用吗
  • php调用图片
  • 未确认融资收益怎么理解
  • 没有资质证书的公司可靠吗?
  • 小规模纳税人进项票可以抵扣吗
  • php读取文件的一部分
  • php图片上添加文字的方法
  • sar参数设置4个数
  • 餐饮营改增什么时候开始的
  • 利息收入做账
  • 固定资产多少钱以上计入固定资产
  • 报关单份数
  • vue 鼠标移入移出(hover)切换显示图片问题
  • mongodb性能优化方案有哪些?
  • mysql数据库最新版
  • 哪些行业不适用税前加计扣除政策
  • 鸡蛋的发票
  • 房地产企业所得税管理办法
  • 成本核算的意义与作用
  • 个人所得税规定的免纳个人所得税的范围
  • 其他应收款科目核算哪些业务
  • 电子承兑没到期兑换手多少手续费
  • 个人所得税计算方法2023计算器
  • 费用误计入固定资产
  • 付款成功的钱怎么返还
  • 新公司期初余额怎么算
  • 信托保障基金会返还吗
  • 税控设备管理办法
  • 新手学会计怎么学
  • order by使用
  • SQL 中sp_executesql存储过程的使用帮助
  • 简单介绍linux系统有哪些主要特点?
  • win7电脑默认打开方式怎么设置
  • brasil.exe是什么进程
  • 本地磁盘未响应怎么解决
  • mac死机按什么都没用
  • win10病毒与防护
  • 图形化ssh
  • windows屏幕上有多个窗口时
  • vs图片简单
  • win10系统怎么cmd
  • js运算符种类
  • [置顶]电影名字《收件人不详》
  • linux中的tree
  • 安卓初始化
  • js生成二维数组
  • 彩票税率税率
  • 税控盘时钟异常去政务大厅那个窗口办理
  • 甘肃车船使用税
  • 地税官网怎么登录
  • 工会代扣代缴个税怎么申报
  • 代销手续费增值税会计处理
  • 建筑公司材料发票
  • 明星征税多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设