web移动端开发不是“把PC网页缩到手机屏”那么粗暴,而是以视口宽度为画布、以触摸为核心交互、以WebView/小程序容器为运行环境的前端分支。 它和PC前端的最大分野:PC信鼠标hover、信固定宽度、信Chrome;移动端信手指touch、信多分辨率回流、信iOS Safari和Android WebView的奇葩兼容。
![]()
📐 适配层:视口+单位双锚
首行必写
,否则浏览器按980px桌面宽度渲染再缩放,字小到戳不中。 单位三选一或混用:rem+postcss-pxtorem(设计稿375则rootValue=37.5),兼容老项目稳;
vw/vh(1vw=屏宽1%),纯CSS无JS,配 postcss-px-to-viewport 自动转;
clamp() 做流体字号 clamp(1rem,2.5vw,2rem),2026年替代大半媒体查询。
Flex做一维导航、Grid做二维仪表盘,position:fixed底部栏必须叠 env(safe-area-inset-bottom) 防iPhone Home条遮挡。
🧩 形态层:H5 / 混合 / 小程序三界
纯移动H5:浏览器打开的响应式网页,最轻;
Hybrid混合:Cordova(老牌插件制)/ Capacitor(现代Web打包iOS/Android,Ionic同族)把Web包进WebView,调相机GPS走JS Bridge;
小程序:微信/支付宝双线程(渲染+逻辑隔离),WXSS+rpx自成体系,不是普通H5;
RN/Flutter 算跨端但不算web移动端——前者JS桥原生控件,后者自绘,脱离WebView。
选错形态=把“公众号H5”当“App原生”承诺,交付必翻车。
⚡ 兼容坑:触摸与键盘
iOS历史300ms点击延迟,设 user-scalable=no 或 touch-action:manipulation 消除,老机用FastClick;
弹层消失后点透,用touchstart替代click或阻默认;
软键盘顶起fixed元素错位,用 visualViewport 事件或 InteractiveWidget;
1px边框用 transform:scaleY(.5) 或 0.5px 兜底;
真机优先:iOS Safari+Android Chrome+微信X5三件套,模拟器不信布局。
⚠️ 避坑铁律
别用 100vw 当满宽(含滚动条溢出),改用 100%;100vh 在Safari含地址栏用 dvh;rem方案忘设html font-size等于没适配;viewport-fit=cover没开时 env() 全返回0; 小程序里写 window.onload 永不触发,得用 onLoad 生命周期;混合App里location.href跳转会跳出WebView,要用原生路由或通用链接;CSS * {box-sizing:border-box} 在小程序不支持通配符要枚举标签。