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

  • 交管12123怎么查询预约结果(交管12123怎么查询非本人车辆违章)

    交管12123怎么查询预约结果(交管12123怎么查询非本人车辆违章)

  • 荣耀30pro可以同时使用两张电信卡吗(荣耀30pro同级别手机)

    荣耀30pro可以同时使用两张电信卡吗(荣耀30pro同级别手机)

  • 华为荣耀20和20i的区别是什么(华为荣耀20和20pro有什么区别)

    华为荣耀20和20i的区别是什么(华为荣耀20和20pro有什么区别)

  • 苹果7p充电口接触不好(苹果7p充电口接触不灵敏怎么回事)

    苹果7p充电口接触不好(苹果7p充电口接触不灵敏怎么回事)

  • 淘宝有哪些活动日(淘宝有哪些活动可以报名)

    淘宝有哪些活动日(淘宝有哪些活动可以报名)

  • 微信上怎样解绑绑定的电话号码(微信上怎样解绑社保卡)

    微信上怎样解绑绑定的电话号码(微信上怎样解绑社保卡)

  • 手机内存无缘无故变少(手机内存无缘无故减少怎么办)

    手机内存无缘无故变少(手机内存无缘无故减少怎么办)

  • sim卡联系人没了怎么恢复(sim卡联系人没了怎么补办)

    sim卡联系人没了怎么恢复(sim卡联系人没了怎么补办)

  • Word中分隔符在哪里(word中分隔符在什么菜单中)

    Word中分隔符在哪里(word中分隔符在什么菜单中)

  • 钉钉撤回的消息怎么恢复(钉钉撤回的消息对方会收到提醒吗)

    钉钉撤回的消息怎么恢复(钉钉撤回的消息对方会收到提醒吗)

  • 闲鱼不退不换规则(闲鱼不退不换规则怎么说)

    闲鱼不退不换规则(闲鱼不退不换规则怎么说)

  • 微信朋友圈怎么看访客(微信朋友圈怎么发文字不发图片)

    微信朋友圈怎么看访客(微信朋友圈怎么发文字不发图片)

  • 华为荣耀30什么时候上市(华为荣耀30什么样子)

    华为荣耀30什么时候上市(华为荣耀30什么样子)

  • 华为手机不能投屏到电视机的原因(华为手机不能投屏SONY)

    华为手机不能投屏到电视机的原因(华为手机不能投屏SONY)

  • wifi搭桥怎么设置(无线网络搭桥设置步骤)

    wifi搭桥怎么设置(无线网络搭桥设置步骤)

  • 淘宝ifasion是什么意思(淘宝ifishon啥意思)

    淘宝ifasion是什么意思(淘宝ifishon啥意思)

  • 半导体存储器分为哪两种(半导体存储器分成两大类( )和( ),其中RAM具有易失性)

    半导体存储器分为哪两种(半导体存储器分成两大类( )和( ),其中RAM具有易失性)

  • gps有多少颗卫星(gps有多少颗卫星2022)

    gps有多少颗卫星(gps有多少颗卫星2022)

  • 手机变成英文了怎么恢复中文(苹果手机变成英文了怎么恢复中文)

    手机变成英文了怎么恢复中文(苹果手机变成英文了怎么恢复中文)

  • 华为图片生成PDF后在哪(华为图片生成文档)

    华为图片生成PDF后在哪(华为图片生成文档)

  • qq扩列是什么意思(qq扩列是什么鬼)

    qq扩列是什么意思(qq扩列是什么鬼)

  • x23幻彩版有防水功能吗(x23幻彩版防误触在哪里设置)

    x23幻彩版有防水功能吗(x23幻彩版防误触在哪里设置)

  • 阿尔法符号怎么打出来(阿尔法符号怎么打出来word)

    阿尔法符号怎么打出来(阿尔法符号怎么打出来word)

  • .env 文件(env文件夹是什么文件)

    .env 文件(env文件夹是什么文件)

  • Yolov5算法解读(yolov1算法)

    Yolov5算法解读(yolov1算法)

  • 一般纳税人开普票税率是3%还是13%
  • 发票作废了清单一样怎么重新使用
  • 兼职劳务报酬需要发票吗
  • 本年利润借方余额意味什么
  • 长期股权投资会计处理方法,对投资方报表有何影响
  • 个人借款利息是多少才合法
  • 银行退回服务费怎么写分录
  • 企业销售商品的业务有什么特点
  • 原材料的运输费怎么做会计分录
  • 建筑业购买车辆怎么入账
  • 业务宣传及广告费超比例
  • 不交社保的单位违法吗?
  • 一般纳税人申请流程
  • 运输企业营改增
  • 购货发票未到
  • 营改增后哪些费用可以抵扣
  • 企业所得税季报怎么申报
  • 初级会计职称考试时间
  • 增资有哪些途径
  • 小微企业的特点及经营模式举例
  • 不动产广告位出租税率是多少
  • 未成立工会组织情况说明
  • 电子银行汇票 票据承兑
  • 笔记本电脑系统更新好不好
  • 物流丢失了货品如何报警处理
  • 测速网在线测速
  • win7浏览器显示证书错误怎么解决
  • 如何用home
  • web前端综合案例开发离线作业1
  • php中关键字修饰属性是什么
  • php yield 异步
  • php获取get请求数据
  • javatoken生成机制
  • 第一章 使用layui的表格和表单
  • 【深度学习】datasets.ImageFolder 使用方法
  • 准确率精确率
  • php 微信公众号自定义菜单
  • php调用网址
  • 日主题ripro v8.1破解版(修复缓存器功能)
  • sql2005安装不上
  • discuz mysql8.0
  • 增值税年底抵扣
  • 余额百分比法计提坏账准备
  • 小微企业所得税税率
  • 个人接私活需要什么条件
  • 融资购入的固定资产如何记账
  • 股东分红申报个税怎么填
  • 短信收到电子退库收入什么意思
  • 现金日记账要如何做账
  • 中秋过节费会计分录
  • 一般纳税人销售旧货可以开专票吗
  • 充油卡未收发票怎么办
  • 销售收入确认后怎么处理
  • 成本费用总额占营业总收入的比率
  • 业务招待费可以计入销售费用吗
  • 财务预算编制方法包括
  • sqlserver的游标
  • win7自带播放器怎么打开
  • openssl/sha.h
  • 电脑出windows
  • 苹果mac浏览器
  • debian安装配置清华源
  • Win7的sysprep工具怎么用 win7自带sysprep工具重置系统方法
  • regloadr.exe - regloadr是什么进程 有什么用
  • Facebook Open Platform编译FAQ
  • cocos2dx游戏案例
  • js中创建函数的方法
  • shell linux命令详解
  • python中pyinstaller
  • python购物车100行代码
  • unity调用c++封装的dll
  • linux启动过程流程图
  • node.js做服务器
  • shell脚本加密不可破解
  • unity按钮函数
  • 在电子税务局如何增加税种
  • ca登陆
  • 车辆购置税是国家收还是地方收
  • 贵州省税务局193项业务
  • 苏州市区公司可以在园区买社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设