目前针对跨终端的方案,主要分为两大阵营:一套资源、两套资源


思路一:通过响应式或页面终端判断去实现一套资源适配所有终端。

优势:只需维护一套资源,维护成本较低。
劣势:需加载适配各个终端的各个资源,在不同终端通过响应式布局实现不同展现,部分交互效果需要在页面中做终端判断,代价较大,若图片资源为一套,部分图片在超高分辨率设备(例如iphone系列)下会失真,且在非wifi情况下即使加了延时加载也易出现加载慢的情况。
技术选型:jquery(或原生js等)+ 响应式 + 前端模块加载器(seajs或RequireJS等)+ css预处理器(sass 或less等)。

思路二:通过终端判断分别调取两套资源以适配所有终端。

优势:可根据不同端做个性设计及个性化信息推送且可按需加载,如移动端可配合重力感应、不同手势做各种炫酷拽效果,pc页面可不受流量限制做适合pc端的效果。
劣势:需维护两套资源,维护成本增加。
技术选型:zepto(或xui等移动端轻量级框架)+ 响应式 + 前端模块加载器 + css预处理器 + 终端适配。


终端适配目前一般通过ua判断来实现。ua判断可放在服务端也可放在页面中,在代理服务器中做跳转更快、更准确且不走应用程序层,即使浏览器禁用了js依然可以跳转到相应的地址,同时秉承着公共服务放在服务端这样的云端服务理念,我们选择了通过代理服务器做终端适配。

User-Agent嗅探,即Web浏览器发送一个Web页面或资源请求时,会发送一个User-Agent首部作为HTTP请求的一部分,那么我们就可以在服务器端获取想要的信息,进而判断并引导用户到达相应的页面地址。


下面我们通过详细分析一个http请求中的user-agent首部来了解其原理:
要点明晰及注意事项:

css像素与设备像素:二者的区别在于前者是抽象的,用于浏览器渲染页面,而后者是设备的最小物理单位。可参考这里进行理解。

视口:移动端浏览器有两个视口,即可见视口与布局视口,二者的区别在于前者为基于移动设备屏幕的实际宽度,而后者为我们为页面定义的用于浏览器渲染的大小。 可参考这里进行理解。

媒体查询:找准断点。

响应式布局:当上下文环境发生变化时可考虑变化布局来展现优雅。当元素脱离文档流绝对定位时,才是相对高度定义的。

响应式字体:font-face绝对会对你的站产生巨大的影响。当容器中定义字体单位为em时要注意继承性,例如:当我们定义某个块级元素的”font-size:1.5em; line-height: 2em;”时,line-height的实际行高为1.5em*2即3em。

文档声明:文档声明建议用H5的,它指示浏览器关于页面使用哪个 HTML 版本进行编写的指令。同时需要定义文档的视口信息,如:width=device-width告诉浏览器渲染该页面的宽度等于设备宽度,initial-scale=1告诉浏览器初始化缩放的比例1:1,user-scalable=no禁止用户缩放页面。

兼容性测试:调试工具推荐chrome的模拟器加真机测试。