一、关于移动端兼容性

目前针对跨终端的方案,主要分为两大阵营:一套资源Vs两套资源。
  第一种是通过响应式或页面终端判断去实现一套资源适配所有终端;
  第二种是通过终端判断分别调取两套资源以适配所有终端。
  这两种思路我们并不能斩钉截铁的说哪一个更优选,正所谓”合适的才是最好的”。
  思路一:通过响应式或页面终端判断去实现一套资源适配所有终端
  优势:只需维护一套资源,维护成本较低。
  劣势:需加载适配各个终端的各个资源,在不同终端通过响应式布局实现不同展现,部分交互效果需要在页面中做终端判断,代价较大,若图片资源为一套,部分图片在超高分辨率设备(例如iphone系列)下会失真,且在非wifi情况下即使加了延时加载也易出现加载慢的情况。
  技术选型:jquery(或原生js等)+ 响应式 + 前端模块加载器(seajs或RequireJS等)+ css预处理器(sass 或less等)。jquery较好的兼容性配合响应式可相对代价较小地实现跨终端。前端模块加载器主要负责按需加载,以提高页面加载速度,css预处理器 的变量、运算、嵌套等特性可大大提高手动计算响应式的效率,妈妈再也不用担心我把比例算错了。当然后两者可参考需求及成本决定是否采用。
  思路二:通过终端判断分别调取两套资源以适配所有终端
  优势:可根据不同端做个性设计及个性化信息推送且可按需加载,如移动端可配合重力感应、不同手势做各种炫酷拽效果,pc页面可不受流量限制做适合pc端的效果。
  劣势:需维护两套资源,维护成本增加。
  技术选型:zepto(或xui等移动端轻量级框架)+ 响应式 + 前端模块加载器 + css预处理器 + 终端适配。zepto作为jquery的移动端版本,依然延续其自身优势,大幅优化了移动端API且摒弃了兼容”非现代浏览器”的冗余代码,成为移动端轻 便可用的js框架代表,对于习惯了jquery的同学来说简直是不二之选!
  终端适配目前一般通过ua判断来实现。ua判断可放在服务端也可放在页面中,在代理服务器中做跳转更快、更准确且不走应用程序层,即使浏览器禁用了js依然可以跳转到相应的地址,同时秉承着公共服务放在服务端这样的云端服务理念,我们选择了通过代理服务器做终端适配。
User-Agent嗅探,即Web浏览器发送一个Web页面或资源请求时,会发送一个User-Agent首部作为HTTP请求的一部分,那么我们就可以在服务器端获取想要的信息,进而判断并引导用户到达相应的页面地址。

二、pc上的网站在移动端上怎么办?
如果把移动端的可视区域(320-768)的话,大部分网站都会因为太窄而显示错乱;所以浏览器默认把viewport设置为一个较宽的值 980px或1024px,至少保证PC网站在移动端上可以显示,只不过出现了横向滚动条而已。
(一)几个概念
1.css像素
html中度量的单位 用px来计算,在pc中往往 1 css px = 1 物理像素
css像素时抽象和相对的了,在不同设备中1px对应不同的设备像素;iphone3分辨率是320*480 即 css 1px = 1个物理像素;iphone4 分辨率640x960但屏幕尺寸没有改变,意味着同一块区域像素多了1倍 即 css 1px =2个物理像素;
2.物理像素
表示每英寸所拥有的像素数目,数值越高,代表屏幕能够以更高的密度来显示图像
3.分辨率
显示器所能显示的像素多少,显示器可以显示的像素越多,画面就越精细,同样的屏幕区域能显示的信息就越多
4.devicePixelRatio
window.devicePixelRadio = 物理像素/css像素 在iphone4中devicePixelRatio=2 也就是1css像素=2个物理像素
devicePixelRatio在不同浏览器中存在一些兼容性问题,并不是完全可靠的
5.layout viewport
移动设备的默认viewport,css布局是以layout viewport 来做为参考系计算的
document.documenElement.clientWidth 获取
该尺寸时动态设置
6.visual viewport
代表浏览器窗口的尺寸,当用户放大浏览器时这个尺寸就会变小
window.innerWidth 获取
7.ideal viewport
屏幕尺寸 设备屏幕的尺寸 单位是物理像素
screen.width 获取 屏幕尺寸是不变的
在该viewport中用户不需要缩放和横向滚动就可以正常查看网站的所有内容
设置移动端网站一般以这个viewport为准,ideal viewport 的宽度等于设备屏幕宽度,使得无论在什么分辨率下,那些针对ideal viewport设计的网站都可以完美的呈现给用户。
(二)如何实现屏幕适配需要用到

1  <meta name="viewport" content="width=device-width">

meta viewport 中有6个通用属性:

  • width 设置layout viewport的宽度 正整数或字符串 ‘width-device’

  • initial-scale 设置页面的初始缩放值,数字或小数

  • minimum-scale 允许用户的最小缩放值 数字或小数

  • maximum-scale 允许用户的最大缩放值 数字或小数

  • height 设置layout viewport 的高度,这个属性很少用到

  • user-scaleabel 是否允许用户进行缩放 'no’或‘yes’ 还有2个需要特别注意的两个属性
    target-densitydpi 在andriod 4.0一下的设备中,不支持设置viewport的width,android 自带浏览器支持设置 target-densitydpi来达到目的;

target-densitydpi = UI-width/device-width*window.devicePixelRation*160
//UI-width: 布局宽度
//device-width:屏幕分辨率宽度 iphone4为640
//target-densitydpi=device-dpi 标示使用设备本身物理屏幕的像素,不会发生默认缩放
  • miniual-ui ios的safari为meta表天新增的属性,在网页加载是隐藏顶部的地址栏和底部的导航栏

(三)相关代码讲解

//移动页面设计 480*854的比例
//dpi = 480/screen.width*window.devicePixelRatio*160;
//scalevalue = screen.width/480;
//控制适配 分为5种组合
/* width + target-densitydpi(计算出来的) */
<meta name="viewport" content="width=480,target-densitydpi=dpi,minimal-ui">
/* width */
<meta name="viewport" content="width=480,minimal-ui">
/* width+target-densitydpi=device-dpi */
<meta name="viewport" content="width=480,targrt-densitydip=device-dip,minimal-ui">
/* width+initial-scale */
<meta name="viewport" content="width=480,initial-scale=scalevalue,maximum-scale=scalevalue,minimum-scale=scalevalue,minimal-ui">
/* targrt-densitydpi */
<meta name="viewport" content="targrt-densitydpi=dpi,minimal-ui">
//通过顺序设置5次来实现适配 直到
Math.abs(window.innerWidth-480)<=10 表示viewport设置正确了。

(四)横竖屏

js代码控制

window.addEventListener("orientationchange",function () {This.isOrietation = true;This.changeOriention();});
//建议执行横竖屏的事件都通过一个侦听完成,做一个统一的管理;在屏幕横竖屏切换完成之后再执行相应的事件

css控制

//定义横屏显示的样式
@media screen and(orientation:landspace){...}
//定义竖屏显示的样式
@media screen and(orientation:portrait){...}
//某个尺寸的特殊样式 竖屏时宽度为768px 符合一般ipad的条件
@media only screen and(orientation:portrait) and(device-width:768px){...}

移动端和pc端浏览器兼容问题及处理相关推荐

  1. PC端微信内置浏览器兼容问题

    PC端微信内置浏览器兼容问题 微信自带浏览器用的是QQ浏览器X5内核,而X5内核是腾讯基于开源Webkit优化的浏览器渲染引擎,目前除了微信.手机QQ.京东等有30多款APP内置浏览器都是基于X5内核 ...

  2. 360浏览器打不开网页_苹果移动端、PC端safari浏览器打不开网页的解决方案!

    你还在为苹果自带的safari浏览器打不开网页而苦恼吗,接下来的答案会帮助你解决苦恼. 苹果自带safari浏览器的设备分为两种:移动端.PC端.因此不同设备出现safari浏览器打不开网页的情况需要 ...

  3. 移动端和PC端都兼容的图片滑动切换展示效果—PhotoSwipe

    介绍一款兼容移动端和PC端的图片滑动切换展示效果-PhotoSwipe,PhotoSwipe是一款可以在移动触控设备上和PC桌面上完美运行的免费开源的图像展示l类独立的Javascript库,它基于H ...

  4. js判断移动端,pc端,安卓,苹果浏览器的方法

    js 判断安卓或者ios 之indexOf方式(一) //判断访问终端 var browser={versions:function(){var u = navigator.userAgent, ap ...

  5. 判断当前是移动端还是PC端 判断是微信浏览器还是非微信浏览器

     需求分析: 在我现有的项目中,使用MVC模型,移动端和PC端主方法都放在了C中,移动端使用 is_mobile函数来区分移动端和PC端,在移动端需要区分微信浏览器和非微信浏览器,所以经过研究和实验, ...

  6. 移动端和pc端的区别

    PC端与移动端的区别 pc端与移动端从兼容性.事件处理.布局.动画处理上来说有五种区别 1.从兼容方面来说, PC考虑的是浏览器的兼容性,而移动端开发考虑的更多的是手机兼容性,因为目前不管是andro ...

  7. 移动端与PC端设计的几项要点

    一.移动端与PC端的区别 1.屏幕尺寸不同 PC端屏幕大,视觉范围更广,可设计的地方更多,设计性更强,相对来说容错度更高一些有一些小的问题不容易被发现.移动端设备相对来说屏幕较小,操作局限性大,在设计 ...

  8. 移动端和PC端的pdf预览与下载

    34.移动端和PC端的pdf的预览与下载 1.预览 需求:在手机端实现pdf的文件与下载,主要是zlb_app中 实现过程:在研究了vue-pdf.pdfjs.pdfh5之后,选择了vue-pdf-s ...

  9. vuecli3 实现 移动端和pc端 界面切换(两套代码)

    适合场景 多页面多系统应用 所有系统都在同一目录下.配置多入口多出口.每个系统之间可以链接.每个系统内依然采用Vue单页应用开发. 产品需求:一套代码 兼容pc端和移动端 , 移动端和pc端的样式布局 ...

  10. js判断客户端是移动端还是PC端

    //判断客户端是移动端还是pc端 //userAgent用户代理 function IsPC() { var userAgentInfo = navigator.userAgent; var Agen ...

最新文章

  1. Python Scrapy爬虫框架实战应用
  2. java循环制作万年历,java使用Calendar制作万年历
  3. Beats Studio3录音师手机音源配置,听出好声音,听出震撼效果!勇士限量款评测!
  4. 龙芯linux内核,龙芯的linux kernel,内核开发与编译
  5. wordcount.java_mapreduce中wordcount的java实现
  6. [NOIP2015] 提高组 洛谷P2661 信息传递
  7. java信号量源代码_Java信号量Semaphore原理及代码实例
  8. 笔记本电脑摄像头无故不能使用的问题解决方法
  9. 基于SiC集成技术的生物电信号采集方案
  10. 海龟绘图简易教程|Turtle for Python
  11. ibm服务器维修论坛,IBM通病
  12. 最短路径Floyd算法【图文详解】
  13. poc测试环境准备_什么是poc测试?
  14. redis desktop manager安装以及使用教程
  15. 从零开始实现图片加载特效之黑白照片、倒影图片、图片蒙版
  16. 微信访问IP地址页面出现的问题
  17. G1 GC详解及设置
  18. 旋转矩阵变换左右手系
  19. 【DC010沙龙年度合集】顶尖Hacking技术盛宴(文末福利)
  20. 利用coding 部署项目环境

热门文章

  1. Error:..\FreeRTOS\queue.c,1088
  2. DSB matlab仿真
  3. T83310 【音乐会】二重变革
  4. 人生进度条百分之20_1分钟get技能:缺了“进度条”,你注定和80%的失败者一样实现不了人生目标...
  5. 计算机 蓝牙鼠标卡顿,蓝牙鼠标卡顿、漂移现象的解决方法
  6. 2018年下半年考试感想
  7. python-给登记照换底色(蓝底变红底)
  8. UE4 PBR材质使用记录
  9. 什么是MTTF、MTBF、MTTR
  10. Eigen学习总结1