深度讲解VIEWPORT和PX是什么

深度讲解VIEWPORT和PX是什么

viewport.png

刚开始接触移动页面重构,是不是很迷惑应该按照多大的尺寸制作?320、640 还是 720?
按照640的设计稿重构完页面,是不是还需要写其他尺寸来适配不同的屏幕大小?
—— 这源于对viewport和px的不了解

已经重构了好多移动页面,但是对为什么要按照640的大小来设计页面,不清楚答案。
给元素赋予固定的像素值,但是奇怪的是在不同的手机里看起来都差不多大小,不需要另外去适配,真是太爽了。为什么?不知道耶。
——这源于对viewport和px的不了解

先来罗列下学习移动页面重构的过程中可能看到过迷糊过放弃过的一些单位:

px、pt、pc、sp、em、rem、dp、dip、ppi、dpi、ldpi、mdpi、hdpi、xhdpi、xxhdpi……

接下来分类给大家介绍下:

① 什么是绝对长度单位?什么是相对长度单位?

② 什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?

③ 什么是ppi、dpi、dp、dip、sp、px?他们之间的关系是什么?

④ 什么是mdpi、hdpi、xdpi、xxdpi?如何计算和区分?

1、什么是绝对长度单位?什么是相对长度单位?

  • 绝对长度单位:
    in(inch英寸)、cm(厘米)、mm(毫米)、pt(磅)、pc(pica)。
    in、cm、mm和实际中的常用单位完全相同。pt是标准印刷上常用的单位,72pt的长度为1英寸。pc也是印刷上用的单位,1pc的长度为12磅。绝对长度单位,虽然理解起来很容易,但是在网页的设计中很少用到。所以我们就忽略它们吧。
  • 相对长度单位:
    是网页设计中使用最多的长度单位,包括px、em、rem等。

2、什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?

  • 屏幕尺寸:
    指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米。常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等。
屏幕尺寸
  • 屏幕分辨率:
    指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素横向像素来表示一个手机的分辨率,如1960*1080。(这里的1像素值得是物理设备的1个像素点)

  • 屏幕像素密度:
    屏幕上每英寸可以显示的像素点的数量,单位是ppi,即“pixels per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。

最明显的就是iPhone 3GS和iPhone 4的区别。屏幕尺寸一样,屏幕分辨率相差一倍,屏幕像素密度也相差一倍。


iPhone 3GS 和 iPhone 4
  • 计算像素密度的公式:


    计算像素密度

勾股定理算出对角线的分辨率:√(1920²+1080²)≈2203px

对角线分辨率除以屏幕尺寸:2203/5≈440dpi。

3、什么是ppi、dpi、dp、dip、sp、px?

  • ppi:
    pixels per inch,屏幕上每英寸可以显示的像素点的数量,即屏幕像素密度。

  • dpi:
    dots per inch,最初用于衡量打印物上每英寸的点数密度,就是打印机可以在一英寸内打多少个点。当dpi的概念用在计算机屏幕上时,就称之为ppi。ppi和dpi是同一个概念,Android比较喜欢使用dpi,IOS比较喜欢使用ppi。

  • dp、dip:
    dp和dip都是Density Independent Pixels的缩写,密度独立像素,可以想象成是一个物理尺寸,使同样的设置在不同手机上显示的效果看起来是一样的。

在Android中,规定以160dpi为基准,1dp=1px。如果密度是320dpi,则1dp=2px,以此类推。


示例.jpg

Android和IOS都会通过转换系数让控件适应屏幕的尺寸。
一个按钮给了44*44dp的大小,在160dpi密度的时候,按钮就是44*44px大小;在320dpi密度的时候,按钮就是88*88px的大小。不需要我们去书写多套尺寸。

  • sp:
    scale independent pixels,用法与dp类似,是专门用来定义文字大小的,受用户android设备字体设置的影响。

  • px:
    就是通常所说的像素,使网页设计中使用最多的长度单位。将显示器分成非常细小的方格,每个方格就是一个像素。(网页重构中使用的px和屏幕分辨率的px不一定是一样的大小。)

4、什么是mdpi、hdpi、xdpi、xxdpi?

  • Google官方指定按照下列标准区分不同设备的dpi:


    Google官方标准
  • 苹果的区分则更为简单:非高清屏、高清屏、超高清屏。

    苹果官方标准.jpg
  • 从数值上看,苹果和安卓有这样的对应关系:


    苹果和安卓对应关系

单位介绍完了。总结下如何使我们更好的理解自己的工作。

我们重构移动页面的时候使用px其实跟安卓开发中使用dp是一样的
有个背后的系数会帮我们把数值适配到这款手机的大小。而这个系数就是上图的1x、2x、3x……这个系数怎么来?是依靠分辨率和屏幕尺寸计算到的屏幕像素密度,再看屏幕像素密度属于哪个系数等级。

转化系数

以上是单位的介绍,下面再来认识个重要的知识点。

Viewpoint

手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中
窗口可大于或小于手机的可视区域,一般手机默认 viewport 大于可视区域。这样不会破坏没有针对手机浏览器优化的网页的布局,用户可以通过平移和缩放来看网页的其他部分。

手机浏览器打开电脑网页

部分机型默认 viewport 大小:

部分手机默认viweport大小

我们可能会这样设置viewport:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>

每个设置对应的是:

参数 意义
width 设置 Layout viewport 的宽度, 为一个正整数, 或字符串"device-width"
height 设置 Layout viewport 的高度, 这个属性对我们并不重要, 很少使用
initial-scale 设置页面的初始缩放值, 为一个数字, 可以带小数
minimum-scale 允许用户的最小缩放值, 为一个数字, 可以带小数
maximum-scale 允许用户的最大缩放值, 为一个数字, 可以带小数
user-scalable 是否允许用户进行缩放, 值为"no"或"yes", no代表不允许, yes代表允许
viewport 对比

这个页面背景图是作为背景给了 background-size:100%; 的,所以整好铺满整个屏幕,大小看起来很适合。而上面的元素使用固定的px值来赋予大小的,例如左上角的人头给了 width:100px;height100%; 。为什么两者分别是这样子显示的?

网页重构时使用的单位px,就是通常所说的像素,是网页设计中使用最多的长度单位。将显示器分成非常细小的方格,每个方格就是一个像素(这和我们理解的屏幕分辨率的1920px 1080px的px是不同的)。不同设置下,方格的大小不一样。

例如 iPhone4S 如果不设置 viewport ,他就会默认是 980px,就像把屏幕分成980份(不是屏幕分辨率的640px哦!)。如果设置一个元素为100px*100px,看起来就是屏幕的100/980,可能如下图所示:

iPhone4s

例如 iPhone4S 如果设置 viewport width=device-width,他就会是320px,就像把屏幕分成320份(不是屏幕分辨率的640px哦!)。如果设置一个元素为100px*100px,看起来就是屏幕的100/320,可能如下图所示:

修改了 viewport 后
未设置viewprot

未设置 viewport,弹出来的都是设备的默认宽度,基本是980px,除了最后一台三星老爷机是800px。

设置了viewport

设置了viewport,width=device-width,弹出来的是设置好的宽度,375px、360px、320px。为什么是这个大小?这就要用到上面讲的知识点了。

iPhone6的屏幕分辨率是1334*750px,ppi是326,所以系数是2x。那device-width就等于750/2=375px。

红米1s的屏幕分辨率是1280*720px,ppi是312,所以系数是2x。那device-width就等于720/2=360px。

页面里的红色块给的是200*200px,在几个设备看起来好像差不多大的样子。

左边是三星note4,右图是红米1s

三星note4的屏幕分辨率是2560*1440px,ppi是515,所以系数是4x。那 device-width 就等于1440/4=360px,和小米的 divice-width 一样大小。但是看起来左边的红色块明显大于右边,因为左边的设备大啊,虽然两者都是分成360份,但是明显左边的1份比右边的1份大。

以上解释了为什么给元素赋予固定的像素值,给字体16px的大小,在大部分手机里居然能看起来差不多大小,也明白了我们并不需要写其他尺寸来适配不同的屏幕大小。不知道我这样拐弯的解释大家能明白不?

对于应该按照多大的尺寸来设计移动网页,这个看设计师喜欢,640是以前的主流,因为好多设计师用的是 iPhone4S、5S。现在在慢慢转向750,因为iPhone升级成6了。不管哪种尺寸的设计稿,重构都可以用一套方法制作好页面,如果是背景平铺(background-size:100%)、上面的元素px设置大小的话,没问题,能顺利适配其他手机的。如果是固定整体大小重构,再利用 js 判断屏幕大小进行页面缩放,也没问题,能顺利适配其他手机的。重要的前提是要设置好正确的 viewport。

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

推荐阅读更多精彩内容