1.首先说滚动条

移动端开发在不设置任何适配和viewport宽度的情况下,以iphone5为例:屏幕界面的逻辑分辨率是320x568,在谷歌浏览器的界面下屏幕的可视宽度是980px(谷歌设置的,每个浏览器宽度不一样),
所以界面如果是980可以横向铺满全屏:

如果超过980就会出现滚动条.比如界面宽度是1200:

所以屏幕出现滚动条很大可能是 viewport设置不对或者未配置这个属性(滚动条一般取决于viewport 里面的宽度设置,如果没有配置viewport里面的宽度,并且界面宽度超出浏览器默认的可视宽度就会出现滚动条),如果加上这个标签"",移动端浏览器的可视宽度就 = 移动端的逻辑像素;所以设置后HTML的宽度就是320px了,所以里面宽度是320px的DIV可以填充整个屏幕宽度了。

超出就会出现滚动条了:

当然只设置“initial-scale=1”效果和 “width=device-width”一样的

2.再说PC界面在移动端被缩放

还是以iphone5为例,苹果5用谷歌浏览器的话界面默认宽度是980(在不配置viewport的情况下,并且每个浏览器标准宽度不一样),但是苹果5的逻辑像素是320X568(逻辑像素也就是css像素,或者说是PC屏幕下的像素),



所以上图: 一个PC界面在不添加任何适配和viewport比例等配置,直接拿到移动端显示,界面会被等比例缩放,例如上图:一个宽980px的界面如果放在PC端显示宽度就是980px,但是拿到移动端显示的界面铺满了320px(PC的像素或者逻辑像素)的屏幕(因为在谷歌下浏览器默认可视宽度也是980所以可以铺满),缩放比例是980/320 = 3.06倍,所以PC端100px的宽度在移动端界面会缩放成32px(100/3.06),总之,PC界面拿到移动端如果没有设置适配和viewport缩放比例的话界面会被缩小,缩小比例根据浏览器的默认的可视宽度来确定(比如谷歌的是980,所以在苹果5下界面会相对于PC界面被缩小980/320=3.06倍)

同样想不被缩小,想和PC的宽度一致,也要设置viewport标签:
<meta name="viewport" content="width=device-width"> 或者 <meta name="viewport" content="initial-scale=1">

3.关于设备像素比(device pixel ratio)简称dpr

dpr = 物理像素 / 逻辑像素,这个比例不是控制界面在不同移动端下的大小缩放的,dpr不会改变界面内容的大小,改变的是清晰度,相当于相同长宽大小下1px(pc像素)代表多少像素(屏幕物理像素)的比例,相当于屏幕清晰度的比例,在不同的屏幕上,CSS像素所呈现的物理尺寸是一致的,而不同的是CSS像素所对应的物理像素具数是不一致的。在普通屏幕下1个CSS像素对应1个物理像素,而在Retina屏幕(dpr=2)下,1个CSS像素对应的却是4个物理像素,所以相同大小下的DIV更加清晰。
详细参考:http://www.w3cplus.com/css/towards-retina-web.html

4,怎么算出来的font-size

font-size = px值 / rem值 例如 100 = 750px / 7.5rem

布局排版都用rem做单位,然后不同宽度的屏,js动态计算根节点的font-size。
假设设计稿是宽750px来做的,书写css方便计算考虑,根节点的font-size假定为100px,得出设备宽为7.5rem。设计稿中标注的任何px数值都可以换算成px/100的rem值。
就是说,每一个设备的宽度都定为7.5个rem,然后宽度非750px的设备里,就需要用JS对font-size做动态计算,换算关系为:根节点的font-size=设备宽度/7.5。
(这段理解为:自定义100的font-size,根据设计稿750px的宽来计算出界面的宽就是7.5rem,所以设计稿里面所有的px都除以100再加上rem单位,然后这个界面拿到其他不同分辨率的屏幕下都要首先动态计算font-size,因为之前font-size可以根据750/7.5算出来,所以这个界面假设在375px宽的屏幕下显示,font-size就是50=375/7.5,这样font-size和屏宽的比例永远是7.5,原本在750界面宽度为0.32rem的div(0.32100=32px),移到375的屏幕下,0.32rem没有变但是font-zise变成了50,所以div宽度变为0.32rem50=16px,相当于这个div根据屏幕缩小一半而缩小一半,这样就算适配不同屏幕了吧

7.5这个比例是根据不同的设计稿得到的,比如设计稿是640px,比例就是6.4
基于iphone4或者iphone5来的,所以它的设计稿竖直放时的横向分辨率为640px,为了计算方便,取一个100px的font-size为参照,那么body元素的宽度就可以设置为width: 6.4rem,于是html的font-size=deviceWidth / 6.4。这个deviceWidth就是viewport设置中的那个deviceWidth。根据这个计算规则,可得出本部分开始的四张截图中html的font-size大小如下:
deviceWidth = 320,font-size = 320 / 6.4 = 50px
deviceWidth = 375,font-size = 375 / 6.4 = 58.59375px
deviceWidth = 414,font-size = 414 / 6.4 = 64.6875px
deviceWidth = 500,font-size = 500 / 6.4 = 78.125px

即:document.documentElement.style.fontSize = document.documentElement.clientWidth*(window.devicePixelRatio||1) / 7.5 + 'px';

注:需要考虑到dpr,即一倍屏两倍屏的问题。
http://mobile.51cto.com/web-484304.htm

备注:
每个浏览器对最小font-size的支持,不尽相同。js动态计算的font-size值太小时,会导致超小屏上UI显示效果比预想中的偏大。
比如,font-size计算是10px,但是chrome只支持到12px,他就按照12px去渲染了,这就会导致UI偏大了。(上面方案中的100px肯定是没有问题的)
具体表现:

从Pc转向H5开发遇到的适配问题思考的更多相关文章

  1. H5开发:横屏适配

    平常我们做过的需求里,主要是以竖屏式为主,而横屏式较少.对于竖屏式场景来说,大家的经验会比较丰富,因此,此次主要式探讨下横屏式场景下的一些需要注意的点,特别是怎样去做横屏适配. 对于 H5 横屏页面来 ...

  2. 浅谈无线h5开发

    最近一直在做h5的项目,对h5开发有了自己的理解.首先h5开发并不是指的html5的开发,而是指无线端的web开发,至于为什么叫h5开发,我觉得一方面是因为html5近几年还是挺受关注,另一方面h5在 ...

  3. 使用Flexible实现手淘H5页面的终端适配【转】

    曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面做讨论—— ...

  4. 使用Flexible实现手淘H5页面的终端适配(转)

    曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面做讨论—— ...

  5. (转)使用Flexible实现手淘H5页面的终端适配

    原文链接 曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面 ...

  6. PC/APP/H5三端测试的相同与不同

    随着手机应用的不断状态,同一款产品的移动端应用市场占相较PC端也越来越大,那么app与PC端针对这些产品的测试有什么相同与不同之处呢?总结如下: 首先谈一谈相同之处: 一,针对同一个系统功能的测试,三 ...

  7. [转]使用Flexible实现手淘H5页面的终端适配

    曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面做讨论—— ...

  8. 带你使用h5开发移动端小游戏

    带你使用h5开发移动端小游戏 在JY1.x版本中,你要做一个pc端的小游戏,会非常的简单,包括说,你要在低版本的浏览器IE8中,也不会出现明显的卡顿现象,你只需要关心游戏的逻辑就行了,比较适合逻辑较为 ...

  9. 10天学会phpWeChat——第七天:创建一个自适应PC网站+H5移动端的模块

    本教程基于phpWeChat核心框架1.1.0+版本.下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 通过前面六讲的系 ...

随机推荐

  1. bootstrap table 超链接的添加 <a>标签

    后台管理页面采用 bootstrap table 页面样式: 现在需要在操作中添加一个<a>标签,跳转到不同的页面 { title: '操作', align: 'center', form ...

  2. JVM理解

    在阅读本文之前,先向大家强烈推荐一下周志明的<深入理解Java虚拟机>这本书. 前些天面试了阿里的实习生,问到关于Dalvik虚拟机能不能执行class文件,我当时的回答是不能,但是它执行 ...

  3. excel批量中英翻译单元格

    英 ==> 中 =FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?&i="&H1&&q ...

  4. springboot(九)-log配置

    spring项目放到tomcat中运行,我们可以在tomcat的logs文件夹下面生成log文件.那么我们的springboot项目没有放到系统安装的tomcat容器中,怎么设置生成log文件呢? 有 ...

  5. 一些学习比较好的网站,及es6学习好网站,前端用的相关库,及知道的插件

    图形可视化:d3js  echarts https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects ...

  6. typescript -- ts

    算是强类型语言,javascrpt是弱类型语言,是指对数据的类型的处理,弱类型语言的特点有时候只是在支行的时候才告诉你出错了,但写的时候你是查觉不到的 ts也是以es5-7为语法标准的,开发的算是另外 ...

  7. jmeter调试脚本之变量参数化

    前言 对于参数化,觉得用得最多的应该是csvread函数.csv data config以及用户自定义变量(前一篇文章已经进行了讲解)控制器这几个 案例:bugfree ,提交bug,参数bug名称和 ...

  8. VMware Workstation pro14 虚拟机下安装CentOS6.5图文教程

    1 启动VMware的画面 2.点击 创建新的虚拟机 3 选择 典型(推荐) 4 选择 稍后安装操作系统 5 选择客户机操作系统类型 6 设置虚拟机名称 和 安装路径 7 指定磁盘容量 8 点击 自定 ...

  9. dubbo示例

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 我也不明白这是什么意思,使用了之后大概就是提供一个将多个项目进行联合的一种分布式,使用的是一 ...

  10. Python基础(4) - 变量

    Python 命名规则: 变量名必须是字母或者_开头. 变量名的其他部分可以是字母,_或者数字. Python是大小写敏感的. 以下划线开头的标识符是有特殊意义: 以单下划线开头(_foo)的代表不能 ...