首页技术专题博客目录我的收藏关于与联系

移动端开发的坑:从响应式到原生适配

项目要做移动端适配,我们用了响应式设计。但上线后发现,移动端体验很差。后来改成移动端优先,又做了很多优化,才勉强能用。这篇文章记录一下移动端适配的过程。

响应式设计的开始

项目刚开始,只做了 PC 端。后来要做移动端,我们用了响应式设计。用媒体查询,不同屏幕显示不同样式。

听起来很简单,但做起来很麻烦。PC 端的布局在移动端显示不好,要重新设计。

第一个问题:布局

PC 端是三栏布局,移动端要改成单栏。但改起来很麻烦,要写很多媒体查询。

更烦的是,有些组件在移动端要隐藏,有些要改变样式。媒体查询写了很多,代码变得很乱。

第二个问题:字体

PC 端字体是 16px,移动端也是 16px。但移动端屏幕小,16px 看起来很大。

我们用了 remvw,但兼容性不好。有些浏览器不支持,要写 fallback。

第三个问题:触摸

PC 端用鼠标,移动端用触摸。触摸区域太小,用户点不到。我们加大了触摸区域,但布局又乱了。

更烦的是,移动端有双击缩放,用户双击会放大页面。我们用了 viewport,但有些设备还是有问题。

第四个问题:性能

移动端性能差,PC 端的代码在移动端跑不动。动画卡顿、滚动不流畅、页面加载慢。

我们做了很多优化:减少动画、优化图片、懒加载,但效果不明显。

移动端优先

响应式设计不行,我们改成移动端优先。先做移动端,再做 PC 端。

但改起来更麻烦,要重写很多代码。花了 2 个月,才改完。

移动端优化

改成移动端优先后,我们做了这些优化:

1. 图片优化

移动端网络慢,图片要优化:

  • 压缩图片,减小文件大小
  • 用 WebP 格式,兼容性好的用 WebP
  • 用响应式图片,不同设备加载不同尺寸
  • 懒加载,滚动到才加载

2. 代码优化

移动端性能差,代码要优化:

  • 减少 JavaScript,只加载必要的
  • 代码分割,按需加载
  • 减少 DOM 操作,提升性能
  • 用 CSS 动画,不用 JavaScript 动画

3. 交互优化

移动端交互要优化:

  • 加大触摸区域,至少 44x44px
  • 优化滚动,用 -webkit-overflow-scrolling: touch
  • 禁用双击缩放,用 touch-action
  • 优化输入,用合适的输入类型

遇到的坑

坑一:iOS Safari

iOS Safari 有很多坑:

  • 地址栏会隐藏,页面高度会变
  • 100vh 不准确,要用 JavaScript 计算
  • fixed 定位有问题,要用 sticky
  • 滚动有惯性,要禁用

坑二:Android 浏览器

Android 浏览器也有很多坑:

  • 不同厂商浏览器表现不同
  • WebView 和浏览器表现不同
  • 有些 CSS 属性不支持
  • 性能差异很大

坑三:横竖屏切换

横竖屏切换也有问题:

  • 布局会乱,要重新计算
  • 键盘会弹出,页面会滚动
  • 视口会变,要重新适配

现在的状态

优化后,移动端体验好了一些:

  • 页面加载时间从 5 秒降到 2 秒
  • 交互更流畅,卡顿减少
  • 布局更合理,用户体验好

但还是有问题,比如不同设备表现不同、性能差异大等。这些问题还在优化中。

如果重新开始

如果重新做一个移动端项目,我会:

  • 一开始就做移动端优先,不要后面改
  • 做好图片优化,减小文件大小
  • 做好代码优化,提升性能
  • 做好交互优化,提升用户体验

总结

移动端开发很麻烦,不是简单的响应式设计。布局、字体、触摸、性能,都要考虑。

如果你们项目也要做移动端,建议一开始就考虑,不要后面改。后面改成本很高,效果也不好。

另外,移动端要持续优化。不同设备表现不同,要不断测试和优化。