H5 移动端适配
移动端网页的适配是 H5 移动端开发中的一个重要环节。由于设计稿通常是基于特定的分辨率设计的,而移动设备的屏幕尺寸和分辨率各不相同,因此适配的目标是让设计稿在各种设备上都能一致地显示。
下面主要介绍两点移动端网页适配方法:
Rem 布局适配
这个方案利用的是动态改变 html 的 font-size 和 rem 单位来实现。
- 根元素 html 的 font-size = 设备视口宽 ÷ 份数 n (如 flexible.js 中的 n = 10).并且在浏览器视口发生变化的时候动态去改变.
- 设计稿也分为份数 n,元素 a rem = 元素 a px ÷ (设计稿的宽 ÷ n)
举个例 子:
设备视口宽为 375px.设计稿宽为 750px,里面文字字号为 34px.
- 将设备视口分成 10 份,设置 根元素 html 的 font-size = 375 ÷ 10 = 37.5 px,即 1 rem = 37.5 px
- 字号换算成 rem 单位. font-size = 34 ÷ (750 ÷ 10 ) = 0.45 rem(保留两位小数)
可以看到 taobao 的移动端就采用了这种方案.
如果需要使用 rem 单位进行适配,推荐使用以下两个工具:
- postcss-pxtorem 是一款 PostCSS 插件,用于将 px 单位转化为 rem 单位
- lib-flexible 用于设置 rem 基准值
Viewport 布局
vw 和 vh 是将视口 宽/高 都分成 100 份,相对于设备视口 375px 来说 1vw = 375 ÷ 100 = 3.75px,和 rem 方案基本类似.
将设计稿 750px 中的 34px 转换为 设备视口 n vw 就等于 n = 34 ÷ (750 ÷ 100 )= 4.53333 vw ≈ 4.53 vw。
vw/vh 和 rem 对比:
- vw/vh 将视口分成 100 份,rem 可以自定义划分为 n 份.
- vw/vh 适配更简单,不需要动态改变根元素 html 的 font-size.
可以看到 bilibili 的移动端就采用了这种方案,不过他使用的是 vmin 这个单位.
如果需要使用 viewport 单位 (vw, vh, vmin, vmax),推荐使用 postcss-px-to-viewport 进行转换。
viewport meta
<meta
name="viewport"
content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover"
/>
用上面两个方案进行移动端适配时,需要将当前的宽度设置为设备宽度 width=device-width
,一般还会禁用掉用户的缩放功能,因为缩放可能导致页面布局出现错乱user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1
.