谈谈移动端
- 兼容性?适配?
- 兼容处理方案?
- 遇到问题?
- 多端适配问题?
谈谈meta如何设置
- 设置meta的viewport
- 由于移动端会自动缩放页面,所以我们需要加入meta标签,使到页面不准缩放
- device-width: 宽度设置为设备的实际宽度
- initial-scale=1.0: 防止浏览器对页面进行缩放
- user-scalable=no: 不允许用户手动缩放页面
- maximum-scale、minimum-scale: 定义放大缩小比例
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
谈谈适配方案
在实际项目中,rem和vw/vh搭配使用,容器的宽高的适配布局,可以通过vw/vh ,内容、字体可以通过rem
-
rem
-
vw/vh
- 当屏幕大或者屏幕小的时候,字体可能太大或者太小
-
第三方库:
- postcss-pxtorem
- 自动css文件的把px转换为rem
- amfe-flexible
- 动态计算根元素html字体大小
- postcss-pxtorem 转换的是 rem 单位,amfe-flexible 控制的是 rem 的大小,可以搭配使用
- postcss-pxtorem
-
搭配 flex弹性布局
-
媒体查询
- 使用tailwind的话,媒体查询写起来很方便
- 如
md:w-32、lg:w-48
- 如
- 使用tailwind的话,媒体查询写起来很方便
-
图片响应式
<source>标签指定不同设备条件下加载的图片资源。
<picture><source srcset="image-small.webp" type="image/webp" media="(max-width: 600px)"><source srcset="image-medium.webp" type="image/webp" media="(max-width: 1200px)"><source srcset="image-large.webp" type="image/webp" media="(min-width: 1201px)"><img src="default.jpg" alt="Example Image"></picture>
谈谈移动端兼容
- 边框1px边框像素的问题
- 底部安全区域横线适配
- 100vh高度问题
- 输入框搜索弹出键盘,导航栏会被撑出屏幕抖动问题、还有遮挡的问题
- 开发h5的时候,在钉钉内置的浏览器打开h5,出现导航栏问题,需要使用钉钉SDK来修改标题
100vh高度问题
在开发调试,使用100vh是没有问题,但是在真机可能会出现滚动条,因为在真机上,地址栏和工具栏是动态显示和隐藏的
- 在真机上,100vh是不包含地址栏、工具栏, 会导致出现滚动条
- 移动端中,地址栏和工具栏会占据一定的高度,如果使用了100vh
- 比如页面的容器使用了100vh,而出现了地址栏的话,导致容器设置的100vh会超出了可视区域范围,就会出现滚动条了
如何解决:
- 1、使用window.innerHeight替代100vh
- 需要使用js来计算高度,手动计算视口高度
- 2、使用dvh
- 动态视口单位,这是个新的特性
dvh表示 Dynamic Viewport Height,会随着浏览器工具栏出现/隐藏动态变化
useVh方法
- 由于移动端使用vh会有兼容问题,因为vh不包含地址栏和工具栏的高度,当使用100vh的时候,如果出现了地址栏和工具栏。会导致容器的内容被挤下去,导致出现滚动条
- 通过window.innerHeight动态计算视口的高度
- 设置css变量,把动态计算好的高度,赋值给这个css变量,让css文件可以直接使用
边框1px边框像素的问题
在代码上写 border:1px,结果发现在有的手机中,1px会比实际效果粗
解决方案:
-
viewport+rem
-
border-image
缺点:
- 修改颜色麻烦, 需要替换图片
-
box-shadow模拟边框
缺点:
- 边框有阴影
-
transform: scale(0.5) + 伪元素 模拟的方式
底部安全区域横线适配
- 利用css变量
- env()和constant(),是IOS11新增特性,Webkit的css函数,用于设定安全区域与边界的距离
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
100vh在ios(safari)浏览器和ios的chrome浏览器问题
100vh是指去掉地址栏和工具的高度
- 在ios safari浏览器中,会出现滚动条
解决方案:
- js解决:window.innerHeight替代100vh
- css解决:
-webkit-fill-available来自动填满剩余空间
输入框键盘遮挡问题
先缩小排查范围,先把引发出现的问题范围缩小,比如在弹出框里面的内容操作会影响导航栏被撑出屏幕,那么可以把里面的内容拿出来,看看是里面内容问题 还是输入框有问题,再进一步排查
-
最后发现是input这个组件问题引起
-
input设置
adjust-position为false- adjust-position 表示 是否自动上推页面
h5内嵌app高度适配问题
- 当h5内嵌在app时,高度需要减去原生的app顶部状态栏和原生的导航栏高度
- 通过JS Bridge 来调用app的方法,获取状态栏高度