夜听城嚣 夜听城嚣
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏

dwfrost

前端界的小学生
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏
  • css.requireModuleExtension和css Modules
  • css scrollbar样式设置
  • iphonex适配
    • HTML和CSS知识点
    frost
    2022-03-23

    iphonex适配

    本文参考自iphoneX移动端适配问题 (opens new window)。

    # 背景

    自iphoneX出来后,前端多了一个需要适配的场景,就是iphoneX的底部小黑条,对于底部的一些组件比如tabbar,吸底按钮等,会被小黑条遮挡,影响体验。

    解决方式就是设置间距,避开小黑条,留给页面内容足够的安全区域。

    # 解决

    # 方案一:根据机型判断

    这个在之前小程序中判断较多

    export function isIphoneXClassFn() {
      let isIphoneX, isIphoneXS, isIphoneXR, isIphoneXS_MAX
      try {
        let model = wx.getSystemInfoSync().model
        if (model.indexOf('iPhone X') > -1) {
          isIphoneX = true
        }
        if (model.indexOf('iPhone XS') > -1) {
          isIphoneXS = true
        }
        if (model.indexOf('iPhone XR') > -1) {
          isIphoneXR = true
        }
        if (model.indexOf('iPhone XS Max') > -1) {
          isIphoneXS_MAX = true
        }
      } catch (err) {}
      return isIphoneX || isIphoneXS || isIphoneXR || isIphoneXS_MAX
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    如果是app中,也可以利用js-bridge来判断机型,比如

    function isIphoneX() {
        return new Promise((resolve, reject) => {
          JSBridge.invoke(
            {
              name: 'getDeviceInfo',
              useUnifiedAPI: true
            },
            {}
          )
            .then(state => {
              const { data } = state
              const iphonexList = [
                'iPhone10,3',
                'iPhone10,6',
                'iPhone11,2',
                'iPhone11,8',
                'iPhone11,4',
                'iPhone11,6',
                'iPhone12,1',
                'iPhone12,3',
                'iPhone12,5'
              ]
              const { deviceModel } = data
              if (iphonexList.indexOf(deviceModel) > -1) {
                resolve(true)
              } else {
                resolve(false)
              }
            })
            .catch(state => {
              reject(false)
            })
        })
      },
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    然后根据是否iphonex来决定是否设置padding-bottom:34px;。

    # 方案二:开启安全区适配

    1. 在 head 标签中添加 meta 标签,并设置 viewport-fit=cover 值

      <meta
        name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
      />
      
      1
      2
      3
      4
    2. 设置padding-bottom

      针对需要适配的元素,比如底部tabbar,设置padding-bottom

      {
      padding-bottom: constant(safe-area-inset-bottom);
      padding-bottom: env(safe-area-inset-bottom);
      }
      
      1
      2
      3
      4
    #css
    上次更新: 2022/03/24, 09:36:58
    css scrollbar样式设置

    ← css scrollbar样式设置

    最近更新
    01
    提交代码时修改commit消息
    04-09
    02
    如何快速定位bug
    02-20
    03
    云端web项目开发踩坑
    08-25
    更多文章>
    Theme by Vdoing | Copyright © 2021-2025 dwfrost | 粤ICP备2021118995号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×