移动设备分辨率

为什么模拟器下iP6的分辨率为375*667而设计图一般给750*1334?

PPI:每英寸内有多少物理像素点(设备像素点),就是像素密度。标准PPI(160):1个设备像素 对应1个css像素,放大:1个css像素 对应多个设备像素,缩小:1个设备像素 对应多个css像素。


PPI计算方法


设备像素(物理像素):一个设备像素是显示器上最小的物理显示单元,每台设备的设备像素都有自己的颜色值和亮度值,大小是固定的,是不可变的;但也因为不同设备的设备像素大小不同,所以导致PPI不同。

css像素:css像素是web编程的概念,用于逻辑上衡量像素的单位,也就是我们做网页时用到的像素,是抽象的,不是实际存在的。

设备独立像素:计算机坐标系统中的一个点,它代表可以由程序使用的虚拟像素(比如:css像素),然后由相关系统转化为物理像素,虽然设备独立像素可以被拉长或者被压缩,但不同设备上的正常独立设备像素大小相同。

设备像素比(dpr):它是由  这台设备的PPI/160(标准PPI)  得到的,然后也等于设备像素(物理像素)/设备独立像素,设备像素比就是 设备像素(物理像素)与设备独立像素的转换关系值,因为设备像素(物理像素)是固定的,那么设备像素比就决定了设备独立像素的大小,我们可以通过js中window.devicePixelRatio来获取设备像素比,也可以通过css中-webkit-device-pixel-ratio,-webkit-min-device-pixel-ratio和-webkit-max-device-pixel-ratio进行媒体查询。

在标准普通屏PPI(160)下,设备像素比为1:1,1个设备像素(物理像素)对应1个css像素。

位图像素:一个位图像素是栅格图像(如:jpg,png,gif等)最小的数据单元,每一个位图像素包含着自身的显示信息(如显示位置,颜色值,透明度)

flexible做了什么事情:它会根据不同设备给html添加不同的data-dpr值,font-size值,<meta name="viewport">标签。我们再用rem为单位来设置大小,rem是根据html的font-size值做相应计算的,从而实现适配效果。它只对ios设备进行判断,安卓始终认为dpr为1。font-size值它是如何确定的呢?目前Flexible会将视觉稿分成100份(为了以后更好兼容vh和vw),每一份被称为一个单位a,同时1rem单位被认定为10a,(iphone6下)那么750px=10rem,1rem = 75px,于是将html的font-size设为75px。它这样做效果?动态设置html的font-size与rem结合完成了前端不同大小屏幕的适配;根据dpr动态设置<mate>标签是考虑到retina屏幕,我们采用750*1334设计稿设计时就已经完成了对iphone6(dpr=2)的高清自适应适配(我们的css像素实际用到了750,只不过缩小到了375,这就实现了高清,高清的概念有两个:1个设备像素对应1个css像素,PPI密度越高越好)。

图片怎么适配高清?我们把div容器用两倍的css设备独立像素再进行缩放0.5使dpr为2的手机屏幕下 1个设备像素对应1个css像素 达到高清,图片有位图像素,若容器50*100,那么图片原图大小需要100*200,然后img标签的话直接给img设置width:50px;height:100px;background-image的话设置background-size:contain即可。但在普通屏幕下有缺点1、下载2倍图片浪费资源;2、图片由于downsampling,会失去了一些锐利度(或是色差)。解决方案:准备两套不同尺寸图片,不同dpr下加载不同尺寸图片这需要我们自己根据dpr去适配,不同drp下的font-size大小不同,我们只需要上传一张@2的图片到服务器,一般好的服务器是可以缩略图片的  如_50w_100h 。

border: 1px:在iphone的retina屏幕下,写border: 1px solid #ccc并没问题,本身会经过flexible的缩小达到0.5。但安卓是没有0.5的,最简单的hack:

我们如果写border-bottom:1px solid #ddd;,然后通过transform:scaleY(.5)缩小0.5倍来达到0.5px的效果,但是这样hack实在是不够通用(如:圆角等),写起来也麻烦

字体大小问题:对于页面区块的宽高我们可以对应高清视觉稿,应为视觉稿本来就x2了,对于字体怎么办?我们希望在不同屏幕下看到的文本字号是相同的(不希望在retina屏幕下文本变小),另外在大屏手机上看到更多文本。字体不能用rem,误差太大,且不能满足任何屏幕,我们可以用sass写一个mixin通过@media媒体查询dpr设置不同字体大小  可以让任何屏幕上字体大小统一。为什么字体用rem大小会误差大,字体大小由行高和内容区域高度决定,内容区域高度和字号字体有关,在simsum(宋体)下,内容区域高度=文字大小值,我们按在750*1334下的字体font-size设计,dpr=2下对font-size缩小一倍,会导致在retina屏幕下字体看起来小(具体不清楚)。

理解一下:750的设备像素被分成100份,每10份=1rem=75px,我们写的px会被换算成rem,这里的750px为设备像素,但我们写的css像素其实的确是375px,但flex会判断出我们的dpr把我们的<mate name="viewport">里的参数值写成1/dpr,把我们写的css像素进行缩放成1/dpr,在普通屏幕下字体正常的但在retina屏下会缩小,所以我们写750px也刚好被缩放成375px,所以我们在拿到data-dpr后还要对字体做适配,或者直接用750设计稿里的px不进行转换rem(那么与750px的画布分配无关,)

retina屏幕:普通屏幕下(PPI=160,dpr=1:1),1个css像素 对应1个物理像素(1:1);retina屏幕下(像iphone6 dpr为2:1时),1个css像素 对应4个物理像素(1:4),不同屏幕下,css像素所呈现的大小是一定的,不同的是1个css像素所对应物理像素个数。Ipone6的retina屏幕下,1个设备独立像素对应4个物理像素,由于单个设备独立像素不能分割只能就近取色从而导致图片模糊,所以对于我们20*30的容器最好用40*60的的图片,设计师给出的尺寸1334*750是因为考虑到iphone6的设备像素(物理像素)是1334*750,而它的独立设备像素是667*375。

所以在开发的时候都要按 设计图纸尺寸/2,另外,一个pt容纳2个px已经是人眼视网膜分辨极限,再多人眼也识别不出了。

问题?我们在设备独立像素375*667,设备像素(物理像素)(750*1334) 里做到高清是把与元素方块的设备独立像素按750*1334的高清稿进行设计,然后再把他缩小0.5倍,让750*1334的设备独立像素显示在375*667的原设备独立像素里,使它的 设备独立像素:设备像素=1:1,但我们用到rem,你在html设置的font-size为画布的1/10,也是1rem,那么rem都是相对于画布的,你在750*1334里设置的120*100的元素大小在375*667里不就是60*50?那么rem用法与高清时需要将120*100的缩小一倍放在375*667的60*50的意愿不是违背了吗?不是的,你用750*1334进行设置时,10rem=全屏=750px,那么1rem=75px,html的font-size也会设置成75px,也就是说我们的画布是750px的,然后把它放在大小为原设备独立像素375*667的方框里,我们的页面大小仍是750*1334px(缩小后的设备独立像素),只不过缩小在了375*667px(原设备独立像素)的方框里。rem的作用只是为了适配不同屏幕大小,画布大小我们是根据dpr进行决定是否缩放,也根据dpr进行计算html的font-size。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 前端小白,最近一直在做相关移动端页面问题;针对移动设备分辨率问题总是有 些雾里看花的朦胧,刚才看了一下Mar...
    扭了个妞阅读 211评论 0 0
  • 刚开始做移动端web开发的同学应该都碰到过页面适配问题,为什么我在开发手机上调试好的页面在其他手机会有这样或那样的...
    留七七阅读 19,053评论 5 80
  • 667从左到右依次是尺寸,分辨率,点 iPhone设备 尺寸分辨率点 iPhone 3和3s 3.5英寸(32...
    adrian920阅读 468评论 0 0
  • 问题的由来 手机屏幕的分辨率差异很大。 iphone4:320×480 iphone6:375×667 H5 网页...
    尚山夏香阅读 2,348评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,629评论 1 92