目前我们做移动端项目几乎不需要考虑为什么要这样写样式,为什么设计稿上100px我们直接写成1rem,移动端的屏幕尺寸那么多变,为什么能轻松兼容?那我们得从移动端的屏幕尺寸来探索一下其中的原理,首先就得了解这些费解的概念。

我在网上收集了很多资料,众说纷芸,我按自己的理解整理了这篇文章,如果有理解不当的地方,请指正。

屏幕尺寸

即我们通常说的尺寸是多少多少英寸啦,指的是屏幕对角线的长度。比如iphone6的屏幕尺寸是4.7英寸

设备像素DP(device-pixels)

很多地方又叫设备屏幕尺寸、设备物理像素、屏幕分辨率等等,我感觉是一个概念。比如iphone6是1334*750

像素密度PPI(pixels per inch)

每英寸屏幕上的像素个数,不同屏幕不一样,PPI越大屏幕显示得越清晰,比如iPhone 3gs的设备像素是320×480,iPhone 4s的设备像素是640×960。刚好两倍,然而两款手机都是3.5英寸的,前者的像素密度是后者的两倍,显示出来的画面更清晰细腻。从网上扒了个图:

设备独立像素dips(device-independent pixels)

有的地方也叫逻辑像素。其实也就是我们开发中的document.documentElement.clientWidth。只要逻辑像素相同,显示区域的内容就相同。

倍率DPR(devicePixelRatio)

有的地方也叫设备像素比,是设备像素dp和设备独立像素dips的比例,

也就是dpr = dp / dips

倍率与逻辑像素

概念介绍完了,我们来研究一下这两者的关系,下面这个例子是在网上看到的,感觉解释得比较清晰。

我们以iphone3gs(倍率为1)和iphone4s(倍率为2)来举例,这两者屏幕尺寸都是3.5英寸,大小是一样的,但是分辨率相差了一倍。那么如果按PC网页来考虑,iphone3gs的屏幕分辨率为320480,iphone4s的则为640960,那么在iphone4s上显示的内容应该比在iphone3gs上显示的多,如下图:

可是实际上它们显示的内容是一样多的,这是为什么呢?这是因为Retina屏幕把2×2个像素当1个像素使用。比如原本44像素高的顶部导航栏,在Retina屏上用了88个像素的高度来显示。导致界面元素都变成2倍大小,反而和3gs效果一样了。画质却更清晰。

我们的设计稿是以iphone6为基准来做的,而iphone6的屏幕像素宽是750px,逻辑像素是375px,那么为什么我们的设计稿是750px宽的呢?就是因为切图时获取到的图片是页面上的两倍大,在retina屏幕上实际上是相当于把图片缩小了一倍的,这样可以看到更清晰的图片。如果我们用375px的图片,那么retina屏幕还有什么意义,显示出来的效果就跟倍率为1的屏幕一样了,没有那么细腻了。

我们现在的屏幕适配方式

我们的_reset.less文件里面有一段媒体查询代码

html{ font-size: 312.5%; }

@media screen and (max-width:359px) and (orientation:portrait) {

html { font-size: 266.67%; }

}

@media screen and (min-width:360px) and (max-width:374px) and (orientation:portrait) {

html { font-size: 300%; }

}

@media screen and (min-width:384px) and (max-width:399px) and (orientation:portrait) {

html { font-size: 320%; }

}

@media screen and (min-width:400px) and (max-width:413px) and (orientation:portrait) {

html { font-size: 333.33%; }

}

@media screen and (min-width:414px) and (max-width:431px) and (orientation:portrait){

html { font-size: 345%; }

}

@media screen and (min-width:432px) and (max-width:479px) and (orientation:portrait){

html { font-size:360%; }

}

@media screen and (min-width:480px)and (max-width:639px) and (orientation:portrait){

html{ font-size:400%;}

}

@media screen and (min-width:640px) and (orientation:portrait){

html{ font-size:533.33%;}

}

后面的那些百分比值是怎么来的呢?

312.5%这个基本值是为了计算方便

页面的字体默认是16px,我们把根节点字体设置为312.5%,那么就是16*312.5%=50px,对应设计稿上的100px,那么设计稿上100px的元素,我们样式表里面写成1rem就可以了。

在不同屏幕尺寸(指的是逻辑像素)下面,我们把根节点的字体按比例调整一下,那么页面就按比例进行了缩放,那么我们在不同尺寸的屏幕上看到的页面效果就是相同的了,这个比例是怎么计算的呢,我们拿

@media screen and (min-width:360px) and (max-width:374px) and (orientation:portrait) {

html { font-size: 300%; }

}

这个范围来说,(375/360)*312.5%=300%,于是就得到了这个比例。

> PS:其实这个媒体查询并不是最终起作用的,它的存在只是为了防止js没加载到的时候就先渲染了页面,等后面js加载完后,页面样式改变太大而发生页面跳动,体验不好。最终起作用的是下面这段js代码:

可以回头读一下(点这里—>)移动端开发规范感受一下

$("html").css("font-size",document.documentElement.clientHeight/document.documentElement.clientWidth<1.5 ? (document.documentElement.clientHeight/603*312.5+"%") : (document.documentElement.clientWidth/375*312.5+"%"));

//单屏全屏布局时使用,短屏下自动缩放

//$("html").css("font-size",document.documentElement.clientWidth/375*312.5+"%");//长页面时使用,不缩放

前端屏幕尺寸和分辨率_屏幕尺寸、分辨率、倍率到底是什么鬼相关推荐

  1. 因特尔显卡自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...

    我们玩过CPU超频.显卡超频.内存超频等,相信不少用户还没有尝试过显示器超频,其实在前段时间,装机之家为广大爱好者发布了一篇[电脑显示器刷新率怎么超频?电脑显示器提高屏幕刷新率超频教程]文章,我们将一 ...

  2. ati自定义分辨率_游戏自定义分辨率教学 (低配超高配福利)

    修改游戏自定义分辨率教学另外大神們有更好的方式 比如程序啥的 調用就能改的 可以私密我加上來 N卡 首先打开NVIDIA的控制面板(打开控制台或桌面右键) 2014-6-18 10:29 上传 下载附 ...

  3. dpi和ppi换算_屏幕尺寸,分辨率,像素,ppi,dpi的关系

    前言 下图是苹果官方对iPhone 机型的介绍: 拿iPhone7 Plus来说: 屏幕尺寸:5.5英寸 手机分辨率(像素):1920 (高)x 1080(宽) PPI:401 概念说明 屏幕尺寸:表 ...

  4. 安卓屏幕分辨率及UI尺寸详解

    原文:http://blog.csdn.net/zouchao911/article/details/39648305 1.了解几个概念 (1)分辨率.分辨率就是手机屏幕的像素点数,一般描述成屏幕的& ...

  5. px、pt、dpi、dip、分辨率、屏幕尺寸等等概念

    文章目录 基本概念 屏幕尺寸 屏幕比例 像素px pt/point 分辨率 DPI(点每英寸) PPI(像素每英寸) DIP/DP density Android IOS 最后 参考资料 基本概念 屏 ...

  6. 屏幕分辨率、屏幕尺寸、屏幕像素、屏幕密度完全解析

    在此做笔记方便查看: 原文见 :点击打开链接 http://www.chinaz.com/manage/2015/0902/441624.shtml 另:关于屏幕的适配:参考文章点击打开链接 http ...

  7. 分辨率与屏幕尺寸之间的关系

    [全解析]屏幕尺寸,分辨率,像素,PPI之间到底什么关系? 2015-09-02 12:22 稿源:产品100  5条评论  撤稿纠错 今天我给大家来讲讲这几个咱们经常打交道的词到底啥意思,以及他们之 ...

  8. Android平台根据分辨率计算屏幕尺寸,基于物理尺寸来验证手机和平板应用合并的可行性

    Android平台根据分辨率计算屏幕尺寸,基于物理尺寸来验证手机和平板应用合并的可行性   出发点:Android系统本身是支持多种分辨率的,如图1所示,一般情况下要适配不同尺寸的设备只需要做两件事, ...

  9. 教你彻底弄清楚dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系

    一.基本概念 dip        : Density independent pixels ,设备无关像素. dp        :就是dip px        : 像素 dpi       :d ...

最新文章

  1. Google推荐的15条HTML 5代码军规----来看看你知道几个,我一个都不知道。。。
  2. LAMP部署搭建————重要文件备份
  3. 学习C语言必须知道的理论知识(第二章-算法)
  4. .Net开源工作流Roadflow的使用与集成
  5. WCF 入门 WCF基础知识问与答
  6. jQuery 插件格式 规范
  7. php+mysql投票代码_PHP+jQuery+MySql实现红蓝投票功能
  8. OPPO宣布与哈苏达成影像战略合作
  9. 奥斯卡“最佳国际电影”奖,《哪吒之魔童降世》申请出战!
  10. 群发的我不回??!!
  11. 用Atlas来实现一个基于AJAX的无刷新Chatroom
  12. Mac Automator小教程,简单易懂
  13. SmartBear继SoapUI Pro 5 2之后推出新版本改名SoapUI NG Pro
  14. java代码混淆(使用 ProGuard maven插件)
  15. 【LaTeX入门】15、在文章中添加脚注
  16. CTFshow-命令执行(4)
  17. 民族企业家周景川:凡事勤则易,凡事惰则难
  18. Excel在单元格内如何换行
  19. python输入矩形的长和宽、求周长_输入矩形的长和宽,求出该矩形的周长和面积...
  20. 播放器smplayer的各种键盘快捷键

热门文章

  1. python标准库math中用来计算平方根的函数是_2020超星尔雅网课透过性别看世界完整满分见面课答案...
  2. jQuery学习第二天——jQuery的常见效果(上)
  3. 2020大数据学习资料,全套源码无加密网盘下载
  4. 【均匀分布和正态分布】
  5. 百度地图经纬度计算距离(Java)
  6. 静心,多听,善思--学习之道也
  7. 【具体实现过程】百度地图POI区域的边界经纬度坐标数据采集
  8. EXCEL获取今天是今年的第几周
  9. 五方法破解Linux(CentOS7.4)系统的root密码
  10. 谷歌浏览器,无需安装